Как я могу использовать кэш Joomla в представлении моих компонентов?

Как это обычно бывает с CMS, большинство обращений происходит, пока оно еще «новое». Я хотел бы кэшировать вывод страницы при первом рендеринге в течение заданного периода, чтобы уменьшить большую рабочую нагрузку, необходимую для ее создания.

Я работал с документацией JCache и разработал основную механику как показано здесь:

$ cache = JFactory :: getCache ('MyCache', '');
$ Cache- > setCaching (истина);
$ Cache- > setLifeTime (86400); //24 часа
$ cache_id = 'MyCache_page_123';
$ cached_page = $ cache-> get ($ cache_id);
if (! empty ($ cached_page)) {
    $ the_page_output = $ cached_page;
} Еще {
    $ the_page_output = ... <div> сгенерированный вид HTML </div> ....
    $ cache-> store ($ the_page_output, $ cache_id);
}
//эхо или возвращаем "$ the_page_output"

Я застрял, пытаясь определить, где я должен создать кеш, а затем «сладкое пятно» на использует этот кеш, прежде чем начнется вся работа.

11 голосов | спросил GDP 23 TueEurope/Moscow2014-12-23T23:13:54+03:00Europe/Moscow12bEurope/MoscowTue, 23 Dec 2014 23:13:54 +0300 2014, 23:13:54

1 ответ


8

До сих пор поисковые запросы Google заставляют меня предположить, что joomla автоматически кэширует ваш компонент, если вы добавите display (true, ...) к методу отображения вашего контроллера , как в следующем пример.
Пример также включает некоторый код измерения, чтобы проверить, работает ли он (часть JProfiler).

отображение открытых функций ($ cachable = false, $ urlparams = array ()) {
    $ profiler = new JProfiler (); //debug

    //Кэш Joomla использует только формат, параметр, представление, макет, tpl, язык en id als default cache_id ($ urlparams)
    $ input = новый Jinput;
    $ urlparams [ 'comp_page_specific_id'] = $ вход- > getUInt ( 'comp_specific_id');
    $ urlparams [ 'comp_page_specific_else'] = $ вход- > getUInt ( 'comp_page_specific_else');

    parent :: display (true, $ urlparams);
    JFactory :: getApplication () -> enqueueMessage ($ profiler-> mark ('seconds with caching <br>) Работает только после того, как кто-то посетил эту страницу хотя бы один раз. & Lt; br> Может быть сброшен в backend.')) ;//отлаживать
}
  • Вы должны вручную установить $ urlparams , которые определяют, какие представления компонентов нуждаются в другом кеше ( urlparams = cache_id , поэтому говорить). И Joomla уже занимается общими параметрами, такими как формат, опция, представление, макет, tpl, язык en id.

  • Также имейте в виду, что без обновлений будет выполняться в вашем компоненте. Если у вас есть счетчик попадания в вашей модели, количество обращений останется постоянным , когда будет показано кешированное представление.

* Дополнительная информация: в контроллере библиотеки joomla это следующая строка, вызывающая кеш просмотра и в то же время устанавливает кеш, если он еще не был:
$ cache-> get ($ view, 'display'); //689: устаревший контроллер

( EDIT 2015-01-14: Добавлены urlparams)
( РЕДАКТИРОВАТЬ 2015-01-15: добавлено код дополнительной информации)

ответил e-motiv 14 Jpm1000000pmWed, 14 Jan 2015 15:57:50 +030015 2015, 15:57:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132