WP File Cache: долговременное кэширование в WordPress
Повышение производительности WordPress в один клик
Как известно, WordPress поддерживает два вида кэширования:
- Кэширование на уровне страниц;
- Кэширование на уровне запросов.
Кэширование на уровне страниц WordPress поддерживает, но самостоятельно не реализует, вследствие чего приходится использовать сторонние плагины (Hyper Cache, WP Super Cache и т.д.). При всех достоинствах постраничного кэширования, у него есть несколько недостатков, а именно:
- невозможность использования динамических элементов (например, captcha, работающая по методу «изящного отсеивания спама») или виджетов, генерирующих динамический контент (например, quote of the day);
- плагины, которые отдают комментатору статическую версию страницы (в этом был замечен Hyper Cache), вынуждают пользователя каждый раз вводить свои данные (имя, сайт, email) заново.
Кэширование на уровне запросов WordPress поддерживает и реализует самостоятельно, но в этой реализации есть один недостаток: кэш между сессиями не сохраняется (что может привести к неприятным последствиям). Тем не менее, из-за особенностей архитектуры WordPress, без кэша WordPress работать будет очень медленно.
Очевидно, что если сохранять кэш между сессиями (что WordPress поддерживает, но самостоятельно реализовать не может), это может весьма положительно повлиять на производительность.
Отмечу, что хотя поддержка кэширования на уровне запросов (в том виде, как она реализована сейчас) появилась в версии 2.5, в ядро WordPress были внесены изменения, позволяющие поддерживать долговременное кэширование без танцев с бубнами, только в версии 2.6.
На WordPress.org, как ни странно, плагинов, поддерживающих долговременное кэширование на уровне запросов, я не нашел. Вероятно, разработчики считают, что это экономия на спичках и разумнее будет творить что-то более глобальное (например, страничное кэширование).
Первая версия плагина WP File Cache родилась у меня давно — еще в июне. И лишь недавно я нашел время, чтобы привести плагин в человеческий вид, добавить интерфейс для администратора и перевести плагин на русский язык.
Функциональность плагина:
- реализация долговременного кэширования на уровне запросов;
- полная совместимость с интерфейсом класса
WP_Object_CacheWordPress; - использование памяти под сессионный кэш для увеличения производительности;
- сессионное кэширование часто изменяющихся объектов;
- хранение настроек в коде плагина.
Особенности плагина:
- возможность отключения кэширования (в том числе и встроенного в WordPress);
- возможность отключения межсессионного кэширования;
- возможность задания групп, не подлежащих межсессионному кэшированию (полезно только разработчикам, которые знают, о чём идёт речь);
- плагин хранит свои настройки непосредственно в коде (в файле
wp-content/object-cache.php). Это связано с проблемой курицы и яйца, а также с архитектурными особенностями WordPress: дело в том, что WordPress инициализирует кэш вызовомwp_cache_init(): при обработке данного вызова плагин должен инициализировать кэш. Если бы настройки хранились в таблицеwp_options, плагин бы использовал функциюget_option(). Но функцияget_option()вызываетwp_cache_get(), аwp_cache_get()не может использовать кэш, потому что он не инициализирован. В принципе, это не является проблемой; проблема заключается в том, чтоget_option()читает все опции из таблицы, для которыхautoloadустановлен в 1. На практике это 90–95% таблицы. Ранее я уже писал, что WordPress в целом иget_option()в частности спроектированы так, что если кэширующий модуль не вернул данные, функция затребует их вновь и в полном объеме. Иными словами, опции будут загружены дважды (два обращения к базе данных). А это нехорошо. Поэтому настройки хранятся непосредственно в коде.
Плагин существует в двух локализациях: русской и английской. Если есть желание перевести плагин на другой язык, пишите.
Замечания по установке:
После активации плагин для хранения кэша будет использовать каталог wp-content/plugins/file-cache/cache. Поэтому перед активацией каталог должен быть доступен на запись. Каталог для хранения кэша можно изменить в настройках (для увеличения производительности имеет смысл размещать кэш на RAM-диске); каталог также должен быть доступен на запись.
Плагину при активации/сохранении настроек должен быть доступен на запись каталог wp-content: в него копируется файл object-cache.php. После того, как плагин активирован и сконфигурирован, права на запись можно убрать.
Удаление/деактивация плагина:
Для успешной деактивации каталог wp-content должен быть доступен на запись — требуется удаление файла wp-content/object-cache.php.
Для срочной деактивации плагина можно удалить или переименовать файл wp-content/object-cache.php. В этом случае WordPress будет использовать встроенные механизмы кэширования.
Download
Скачать последнюю версию плагина WP File Cache.
Список изменений
- Версия 1.2.5:
- Кэшируемые данные больше не передаются по ссылке, что позволяет избежать случайного изменения данных в кэше;
- Кэшируемые объекты перед помещением в кэш клонируются (из тех же соображений).
- Версии 1.2.3–1.2.4:
- Версия 1.2.2:
- Добавлена базовая совместимость с WordPress 3.0.
- Версия 1.2.1:
- Оптимизация кода, ускорение работы кэширующего движка;
- Блокировка файла при записи;
- Использование меньшего количества системных вызовов при записи файлов.
- Версия 1.1
- Версия 1.0
- Версии 0.2.x
Оценки производительности
- «Голый» WordPress 2.7rc1:
- Кэширование запрещено: 191 запроса, 0.587 с
- Встроенный в WordPress кэш: 18 запросов, 0.350 с
- WP File Cache: сессионное кэширование: 18 запросов, 0.334 с
- WP File Cache: долговременное кэширование: 3 запроса, 0.315 с
- Данный сайт:
- Кэширование запрещено: 1442 запроса, 3.558 с
- Встроенный в WordPress кэш: 51 запрос, 0.776 с
- WP File Cache: сессионное кэширование: 51 запрос, 0.615 с
- WP File Cache: долговременное кэширование: 13 запросов, 0.576 с


Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.






Почините ваш плагин пожалуйста!!!
Установила, выкинуло ошибку:
Warning: require_once(/home/bc/sites/olyapka.ru/www/wp-content/plugins/file-cache/lib/class.FileCache.php) [function.require-once]: failed to open stream: No such file or directory in /home/bc/sites/olyapka.ru/www/wp-content/object-cache.php on line 4
Переименовала вашу папку wp-file-cache в /file-cache – заработал. Но не открываются опции, выдает “нет такого файла”. Вам об этом кстати выше говорили – http://blog.sjinks.pro/wordpress-plugins/wp-file-cache/comment-page-5/#comment-2917
Ольга, скачайте плагин с WordPress.org. Там это уже три дня как исправлено
http://downloads.wordpress.org/plugin/wp-file-cache.1.2.4.2.zip
А откуда я его еще по вашему качала? Попробую еще раз.
Да, заработало. Но вчера при закачке и с вашего сайта, и с вордпресса происходило описанное мной. Даже не знаю, как это получалось.
Спасибо.
[...] Скачать плагин WP File Cache для WordPress вы можете здесь. [...]
А этот плагин будет корректно работать, если установлено 2 сайта на один движок?
Т.е. двиг один и БД тоже одна, но там разные префиксы у таблиц, т.е. как бы получается 2 разные базы данных в одной и управляются они одним движком (папкой). Оба сайта на одном шаблоне работают, в зависимости от используемой БД в шаблоне меняются некоторые элементы. Ну и админка соответственно разные данные выводит и настройки ВП тоже разные (они ж в бд хранятся.)
Вряд ли. Так как если используется одна установка WordPress, то и кэш будет один — глобальный.
Единственное решение — изменить в файле
object-cache.phpв функцииwp_cache_init()механизм определения пути к кэшу в строкеПуть для каждого сайта должен быть своим.
Но скажу честно, я такую конфигурацию не тестировал.
Работает, при условии, что для каждой базы со своим префиксом используется своя папка, т.е. если база с префиксом, например, wp1_ и сам WP находится в имя_папки_1 и в той же базе есть база с префиксом wp2_ и сам WP находится в имя_папки_2.
Забыл сказать, что вышеописанное мной работает без хирургического вмешательства в сам плагин.
Папку удалить не могу с вашим плагином wp-content/wp-file-cache/cache папка сама появляется. через фтп и через админ панель хостера удалял нифига wp-content/wp-file-cache/en-cache папка с кешом внутри появляется сама по себе сразу после удаления. Что может быть? Где настройки Вашего плагина хранятся?
Настройки хранятся непосредственно в
wp-content/object-cache.php. Строка видаТак как все таки удалить эту папку? Я этот файл снес вообще…а папка не удаляется? Что делать?
Перед тем, как сносить, нужно было очистить кэш. Плагин бы сам всё почистил.
В Вашем случае у файлов кэша, вероятно, другой владелец.
Залейте по FTP этот PHP-файл и выполните его:
function remove_dir($dir, $self)
{
$dh = @opendir($dir);
if (false === $dh) {
return;
}
while (false !== ($obj = readdir($dh))) {
if ('.' == $obj || '..' == $obj) {
continue;
}
if (false == @unlink($dir . '/' . $obj)) {
remove_dir($dir . '/' . $obj, true);
}
}
closedir($dh);
if ($self) {
@rmdir($dir);
}
}
remove_dir('путь к кэшу', true);
?>
[...] У создателя моего любимого файлового кеша под WP, вышел плагин быстрого объектного кеша, рекомендуется [...]