Joomla 3.4 - Оптимизируем системный плагин кэширования страниц

Категория: / DEV Блог / PHP (LAMP)
Джумла в базовой версии имеет выключенный плагин кэширования для страниц (целиком).
Если сайт изменяется не часто, но медленно работает - имеет смысл включть данный плагин.

Алгоритм работы этого плагина: слушаем события

onAfterInitialise  # смотрим есть ли кэш данной страницы, если есть отдаем клиенту, завершаем работу
onAfterRender # кэшируем содержание страницы, если она не прописана в исключениях


После включения не замечаем прибавки в скорости генерации страницы?

Дело в том что плагин кэширования расположен последним в списке, а для запуска его onAfterInitialise системе приходится инициализировать все установленные системные плагины, что в навороченных сайтах вытекает в много милисекундные ожидания (например плагин компонента com_roksprocket инициализируется ~600мс). Для исправления ситуации нужно поднять его наверх - administrator - extensions - plugins, выбираем системные (System), нажимаем на сортировку и перетаскиваем плагин (Page Cache) наверх, чтобы он стал первым в списке.

Эти действия добавят проворности кэшу, но недостаточно - нам нужно чтобы проверка наличия кэша страницы отрабатывала как можно раньше.
Эту проверку можно произвести непосредственно в конструкторе и не ждать onAfterInitialise.

Был написан свой вариант плагина.

Скачать с github.

Эта версия плагина снижает время генерации страницы до 50-100мс с прежних 1-2с.

на рабочем сервере странно повел себя memcache в качестве кэш бэкенда - он работал медленнее в 5 раз чем его файловый собрат

Дополнительно был подключен простой обфускатор-минификатор для css/js на основе gulp. Нужно просто скопировать из head все скрипты и стили, которые вы хотите минифицировать и заменить их в min/config.php (пример config.example.php), при сохранении кэша плагин автоматически заменит все указанные стили/скрипты на один оптимизированный. Неуказанные в конфигурации скрипты останутся без изменений.

Чтобы сгенерировать оптимированные файлы, нужно установить gulp (должен быть установлен node.js).

npm install -g gulp    
npm install --save gulp-concat gulp-uglify gulp-concat gulp-minify-css


идем в папку min, запускам generate.php, в корне сайта появится файл gulpfile.js
нужно выполнить команду gulp -> результат работы в виде двух файлов $assetID.js и $assetID.css будет находится в папке /assets/_/$assetID.js