Joomla кэш - какую схему кэширования выбрать

archive view archive save

joomla.jpg Joomla имеет несколько вариантов кэширования контента: Системный кэш: Отключено; Стандартное кэширование; Прогрессивное кэширование; и плагин Система - Кэш (system / cache).

  1. Начнём с настроек
  2. Берёмся за лупу
  3. Summary

Начнём с настроек

Первые три варианта Системный кэш:

  • Отключено;
  • Стандартное кэширование (оригин.: Conservative Caching, Консервативное кэширование);
  • Прогрессивное кэширование.

Расположены в Общие настройки - Система - Параметры кэша, по адресу /administrator/index.php?option=com_config, где также можно выбрать:

  • Обработчик кэша
  • Путь к каталогу кэша
  • Срок кэширования

В подсказке к Срок кэширования говорится:

Введите максимальное время жизни файлов кэша (в минутах). По истечении времени кэш будет обновлен.

...кэш будет обновлен, - но, каким именно образом кэш будет обновлен - не уточняется:

  • будет сохранён старый кэш и к нему добавится новый?
  • будет удалён старый и будет создан новый кэш?
  • будет обновлён файл кэша для страницы конкретного веб-адреса?

Ответ на этот вопрос в подсказках к настройкам мы нигде не найдём.

А опираясь только на наличие одного лишь пункта меню Система - Очистить устаревший кэш (/administrator/index.php?option=com_cache&view=purge):

Предупреждение

Очистка устаревшего кэша может привести к увеличению нагрузки на сервер на тех сайтах, где хранится большое количество элементов.

Для очистки устаревших групп и файлов кэша нажмите кнопку Очистить устаревший кэш на панели инструментов.

Внимание! Действующие файлы кэша не будут удалены.

Можно сделать вполне обоснованное предположение, что старый кэш сохраняется и к нему добавляется новый.., но это не точно...

Теперь на минуточку сделаем паузу и вспомним про Эти добрые люди..., которые:

  • делали сам движок;
  • переводили название настроек и подсказки к ним;
  • писали оф. документацию;
  • и всех остальных иже с ними...

– Эти добрые люди, –... «Мастер и Маргарита»

– Эти добрые люди ничему не учились и все перепутали, что я говорил. Я вообще начинаю опасаться, что путаница эта будет продолжаться очень долгое время. И все из-за того, что он неверно записывает за мной. (С) Иешуа

Кто, где, что, первый неправильно написал, неправильно перевёл.., и как на самом деле оно то всё работает, - та сразу толком можно и не понять!

Кроме всего выше перечисленного там, где-то там.., среди плагинов есть некий таинственный плагин Система - Кэш (system / cache), который в оригинале именуется ака Page Cache, а не Система - Кэш.

И в основных настройках у нас Системный кэш и какой-то плагин Система - Кэш - какой Кэш из них самый более Системный, не понятно!

Берёмся за лупу

Когда что-то недопонимаем, то обычно сразу же берёмся значит за лупу (ту.., что в поиск.строке вместо кнопки) и начинаем ею туда-сюда.., - шарить в Интернетах выискивая ответы, например по запросу:

А тааАааам... Ночь...

В числе прочего, попалось:

На что и попробуем сейчас обратить свой взор, где, чтобы долго не томить, выделим главное:

  1. Page Caching (ака плагин Система - Кэш) - кэширует полностью всю страницу целиком и кладёт на настройки срока жизни кэша, т.е. продолжает выдавать закэшированное после истечения срока (так там написано):
    The cached page will continue to be served until it's expired – as defined by the Cache Time parameter in the Administrator → Global Configuration → System tab → Cache Settings.
    Based on: URL
  2. Conservative Caching - кэширует всё в отдельности (модули, компоненты, ...) с учётом настроек каждого из них если такие настройки в них присутствуют (в настройках модулей например):
    Based on: URL, view, parameters, ... - ЭТО САМЫЙ СТРАШНЫЙ ВАРИАНТ - если какой-то компонент написан криво-рукожопым говнокодером и view, parameters, ... не проверяются на входе
    Based on: the module id, the user's view levels and the Itemid parameter in the HTTP request - почти те же яйца, но вид сбоку
  3. Progressive Caching - похоже на Conservative Caching с той разницей, что для всех гостей модули всегда закэшированы, т.е. кладёт на срок жизни и индивидуальные настройки кэша модулей
    The functional difference between the two is that with Progressive Caching for logged-off users all modules are always cached.

Summary

Итак.., в конечном итоге...

Опытным путём установлено, что...

Если одновременно включить Системный кэш (на Стандартное/Прогрессивное кэширование) и плагин Система - Кэш (тут вспомним про Эти добрые люди...), то спустя сутки работы можем получить такую вот картину:

$ sudo sh -c "du -shc /cache/*"
72K     /cache/_system
20K     /cache/com_contact
122M    /cache/com_content
709M    /cache/com_k2
500M    /cache/com_k2_extended
20K     /cache/com_languages
48K     /cache/com_menus
420K    /cache/com_modules
24K     /cache/com_plugins
40K     /cache/com_templates
24K     /cache/fof
37M     /cache/jw_sigpro
272K    /cache/mod_articles_news
28K     /cache/mod_custom
32K     /cache/mod_k2_content
24K     /cache/mod_k2_tools
140K    /cache/mod_search
3.6G    /cache/page
5.0G    total

Как видим, /cache/page потянуло 3.6G, что почти в два раза больше, чем взяли дискового пространства com_k2 и com_k2_extended (исправленный) вместе взятые.

Примечательно, что дублей нигде не обнаружено:

$ sudo fdupes /cache/com_k2_extended/
$ sudo fdupes /cache/page/
$

Если включить только плагин Система - Кэш, то за сутки в /cache/page нарастает не так много, а кэш в остальных группах (каталогах) не создаётся.

Путём дедуктивного метода мышления мы можем прийти к тому выводу, что - это значит, что..? Правильно! Что если одновременно включен Системный кэш и плагин Система - Кэш, то в /cache/page попадает что-то ещё, а что именно ещё.., - это тайна покрытая м.раком...

Из вышеизложенного можно дать такую рекомендацию по выбору модели (варианта) кэширования для сайтов на движках Joomla:

  1. включать что-то одно, только плагин Система - Кэш (кэш всей страницы) или только Системный кэш (на Стандартное/Прогрессивное кэширование), а иначе диску жопа;
  2. Page Caching (он же плагин Система - Кэш) с точки зрения безопасности и экономии дискового пространства предпочтительнее, потому как Based on: URL (но это не точно);
  3. если включено Стандартное кэширование и стремительно стало пропадать дисковое пространство, то значит в системе завёлся криво-рукожопый компонент и/или это только сейчас вскрылось в связи с атаками на отравление кэша путём подмены параметров, а оно (Стандартное/Прогрессивное кэширование) Based on: URL, view, parameters ..., the module id, the user's view levels and the Itemid parameter in the HTTP request и так далее.

Опять же.., достоверно неизвестно какие именно страницы кэширует Page Caching (ака плагин Система - Кэш), кэширует он все страницы сайта без исключения или только страницы с материалами?

Исчерпывающих же ответов на все вопросы про то, как именно работает Joomla кэш нам не даёт даже оф.документация (тут ещё раз вспомним про Эти добрые люди.., которые что-то постоянно неправильно записывают или переводят), почитав которую возникает ещё больше вопросов!

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


Об авторе
Иван Шаман
Меня нет ни в Инстаграмме ни в Фейсбуке, я просто хожу по улицам и рассказываю первым встречным: сколько зарабатываю; с кем дружу; где живу и чем дышу. У меня даже появилось несколько подписчиков: ПСИХоЛОХ и участковый полицай!
Ещё статьи автора

Добавить комментарий

АХТУНГ! Все комменты гостей модерасятся модерастом.
  1. Мессаги исключительно рекламного содержания, либо содержащие только одни оценочные суждения типа "круто" ("отлично", "спасибо", "автор дебил" и т.п.) не публикуются;
  2. Злостным спамерам, пранкерам и прочей сетевой нечисти рекомендуем напрасно не тратить своего времени и удовлетворять свои больные фантазии на специализированных Интернет ресурсах!;
  3. Разумная обоснованная критика, замечания, дополнения приветствуются. Поля помеченные символом * обязательны к заполнению.


Защитный код
Обновить

Комментарии   

Олегатор
0 #5 Олегатор 27.10.2024 11:40
говнокод ковырнули, там не особо много, по-теме исключений смотреть нужно в isExcluded() файла /plugins/system/cache/cache.php где оно строит УРЛ:
Код:// Gets internal URI.
$internal_uri = '/index.php?' . JUri::getInstance()->buildQuery($this->app->getRouter()->getVars());

Который получается примерно так:
Код:/index.php?Itemid=666&option=com_k2&view=item&id=6666:article-alias-here
Потом перебирая массив с исключениями проверяет:
Код:if (preg_match('#' . $exclusion . '#i', $this->_cache_key . ' ' . $internal_uri, $match))
В $this->_cache_key помещается запрошенный УРЛ типа https://example.com/itemlist?start=666

Если в конец строки дописать каких параметров, например https://example.com/article-alias-here?secret1=value1&secret2=value2 то они будут вначале
/index.php?secret1=value1&secret2=value2&Itemid=666&option=com_k2&view=item&id=6666:article-alias-here

Тобишь, поиск исключений идёт одновременно по внешнему https://example.com/article-alias-here и внутреннему /index.php?Itemid=666&option=com_k2&view=item&id=6666:article-alias-here УРЛах.

Оттого view и вырубает говно-кэш ;-)
Цитировать
Иван Шаман
0 #4 Иван Шаман 25.10.2024 12:06
подозреваю, что Page Caching то кэш тупо ob_start() && ob_get_contents() - поковыряйте глубже, у кого есть на то время. да, а слова в исключениях, то наверно не только в УРЛах ищет, но и в названиях компонентов, - хотя при чём здесь тогда view, ведь ни плагинов ни компонентов со словом view нету. короче, хрень мутная и плохо документированная, а что да как - догадывайся сам
Цитировать
АдМинь БагоИскатель
0 #3 АдМинь БагоИскатель 20.10.2024 21:03
Перечислять в исключениях имена параметров, УРЛы с которыми не нужно кэшировать и дополнительно фильтровать .htaccess-ом - иначе наверно никак.

Если в исключениях будет одно из слов:
  • option
  • index
  • view

то кэш перестанёт работать
Цитировать
Иван Шаман
0 #2 Иван Шаман 20.10.2024 17:06
Цитирую АдМинь БагоИскатель:
...type=atom оно точно кэширует...

ай-я-я-я-я-я-я-я-яй... кэширует оно зараза любой УРЛ и с разными параметрами в нём, типа
  • http://example.com/
  • http://example.com/?param=val1
  • http://example.com/?param=val2
  • http://example.com/?param=val3

всё то складывается в кэш

Алсо кэширует оно всё и для разных доменов, т.е. если сайт доступен на разных доменах!
  • http://example.com/
  • http://example1.com/
  • http://example2.com/
  • http://example3.com/

Фича из настроект Исключить URL исключить все УРЛ с параметрами не получается :sad:

Если добавить знак ? или \? или = или \= или [=] или [\=], то кэш нафиг отказывается работать :cry:

Случайным образом изменяя значения параметров в УРЛе кэш можно забомбить нахрен!

Мндааа.., видимо материал про кэш будет требовать доработки...
Цитировать
АдМинь БагоИскатель
0 #1 АдМинь БагоИскатель 20.10.2024 14:22
Page Caching ?format=feed&type=atom оно точно кэширует, нашел сегодня в кэше, а если оно ещё кэширует тот же урл с дополнительными параметрами например ?format=feed&type=atom&type2=atom2, то это точно жопа!
Цитировать
Комментарии в блоге
Новое на форуме