Увеличиваем производительность WordPress подручными методами
Решив уделить пару часов оптимизации своего собственного блога, я с удивлением обнаружил, что страница может генерироваться несколько секунд (!). Отойдя от шока и выяснив, в чем там дело (этому можно будет посвятить отдельную статью), я быстро разобрался с запросами к базе данных и уменьшил общее время запросов в среднем до одной секунды (ну медленный у меня сервер).
Тем не менее, это заставило меня задуматься о том, как WordPress использует собственный кэш и что можно сделать, чтобы улучшить производительность.
С проблемами быстродействия можно бороться очень радикально: генерировать и отдавать статические версии страниц (благо, плагинов хватает). Но кэширование на уровне страниц мне кажется недостаточно гибким (например, HyperCache убирает cookies, идентифицирующие пользователя (что логично), в результате чего при вводе комментария пользователю приходится вновь набирать свои данные; не поддерживаются динамические элементы на страницах и т.п.).
К счастью, WordPress достаточно гибок для того, чтобы позволить пользователю использовать свой собственный механизм кэширования данных вместо стандартного. Стандартный механизм кэширования реализован в классе WP_Object_Cache
и позволяет кэшировать данные только на время выполнения скрипта. Это не всегда удобно, ибо многие данные не меняются в течение долгого времени (соответственно, можно экономить на запросах). К тому же некоторые запросы, которые осуществляет WordPress, не очень хороши — они нагружают MySQL, а оптимизировать их очень трудно.
Посидев немного и подумав, я написал свою собственную замену для WP_Object_Cache
: плагин называется WP File Cache.
Функциональность плагина:
- поддержка долговременного (persistent) кэширования;
- полная совместимость интерфейса с
WP_Object_Cache
; - кэширование данных в памяти для увеличения быстродействия;
- Версия 0.2.1: реализация non-persistent caching для часто изменяющихся объектов.
Плагин пока находится в стадии тестирования, но его работа мне уже очень нравится
Замечания по установке:
- Каталог
/wp-content/plugins/file-cache/cache
должен быть доступен на запись пользователю, под которым бегает web-сервер:[-]View Code Bashchmod -R 0777 wp-content/plugins/file-cache/cache - При активации плагин копирует файл
object-cache.php
в каталог/wp-content/
. Как следствие, каталог должен быть доступен плагину на запись. - Для срочной деактивации плагина можно удалить или переименовать файл
/wp-content/object-cache.php
. В этом случае WordPress будет использовать встроенные механизмы кэширования.
Update: ниже приведены скриншоты, демонстрирующие эффективность плагина. Для замера количества запросов и времени их выполнения использовался плагин SqlMon, о котором я писал ранее.