Под WordPress есть много хороших кеширующих плагинов – 6 Best WordPress Caching Plugins Compared
Но бывает, что они не помогают. Такое происходит когда какое-то сочетание плагинов на сайте сбивает их “с толку”, и они решают что страницу нельзя кешировать. Также они плохо работают с кешированием аджакс запросов, потому что это сложно реализовать для универсального плагина.
Поэтому написал свой. Прирост быстродействия в 8-10 раз.
Предназначен скорей для программистов, поэтому не выкладываю в открытый доступ.
Установка
1. распаковать файл в wp-content\plugins
2. в файле wp-config.php прописать подключение кеша без запуска всего WordPress
/** Абсолютный путь к директории WordPress. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
// Подключение кеша
$scache_plugin = ABSPATH . 'wp-content/plugins/skynin-cache/scache.php';
if (file_exists($scache_plugin))
include_once $scache_plugin;
/** Инициализирует переменные WordPress и подключает файлы. */
require_once(ABSPATH . 'wp-settings.php');
3. Зайти в админку, и активировать
Если будут баги, деактивировать.
При деактивации подключение из wp-config.php можно не удалять, плагин отключается надежно при деактивации.
Это подключение из wp-config.php можно и не делать, плагин все равно будет кешировать, но тогда прирост скорости будет ощутимо меньший.
Настройки
Работает как все кешеры – при первом запросе – берет из базы.
При повторном – отдаете из кеша.
Так же и с аджакс запросами (они обычно используются в фильтрах)
Сбрасывается при работе в админке, или командой:
ваш_сайт/?clean-cache
Название команды clean-cache можно заменить на другое в файле scache-config.php. использовать только английские буквы и цифры!
Так же scache оптимизирует загрузку js-скриптов.
За это отвечает опция load-js-defer-CDN в том же файле scache-config.php
Если вдруг они будут работать неправильно, то отключить ее можно заменив true на false.
Тоже и с ajax-cache.
Если вам покажется что фильтры работают неправильно, можно отключить заменив true на false.
add-stamp добавляет в html страницу неотображаемую метку работы кеша. Перед тегом body.
Параметр path-cache указывает на расположение каталога кеша. Для его формирования нельзя использовать функции ядра WordPress!
После изменений в scache-config.php кеш нужно сбрасывать.
как писал ранее, просто зайдя в админку, или запросом из браузера ваш_сайт/?clean-cache
В параметре timing указываются URI которые с собственным временем устаревания. Такие файлы не удаляются при заходе в админку, а если они старше на указанное число секунд, от текущего времени. Используются регулярные выражения, поэтому можно указать маски. И нужно эскейпить служебные символы.
В параметре exclude указываются URI которые не нужно кешировать. Используются регулярные выражения, поэтому можно указать маски. И нужно эскейпить служебные символы регулярного выражения.
При наличии в заголовке запроса HTTP_ACCEPT проверяет наличие какой-то из подстрок из http-accept. Если не найдено соответствие – линк считается некешируемым. Используются регулярные выражения.
Проверить своей регулярное выражение можно на сайте regex101.com
Списки регулярных выражений обрабатываются последовательно, поэтому вначале нужно ставить более специализированные.
Пример файла
<?php
return array (
'commands' => array(
'clean' => 'clean-cache', // http://site.dev/?clean-cache
'ajax-cache' => true,
'add-stamp' => true,
'load-js-defer-CDN' => true,
'post-cache' => false,
'path-cache' => ABSPATH . 'wp-content/uploads/scache/'
),
'http-accept' => array(
// !regexp
'text\/html', 'application\/json'
),
'timing' => array(
// !regexp
'\/api\/get_date_posts\/' => 432000, // seconds
'\/api\/get_category_posts\/' => 432000, // seconds
'\/api\/get_tag_posts\/' => 432000, // seconds
'\/api\/get_author_posts\/' => 432000, // seconds
'\/api\/' => 300, // seconds
),
'exclude' => array ( // don't cache it
// ! regexp
'\/checkout\/', '\/cart\/', '\/my-account\/'
),
'excluding cookies' => array(
'woocommerce_cart_hash' => null, // null => any value
'woocommerce_items_in_cart' => null,
'wp_woocommerce_session' => null
)
);
Версии
Существует несколько версия плагина, так как раз у разных заказчиков пришлось дорабатывать по живому специфический функционал.
Указаны различия.
версия 1.2.х
Работает exclude,
, excluding cookies
версия 1.3.х
Работает timing
Работает http-accept
Используются блокирование файлов кеша с помощью flock.
версия 1.4.х
В разработке.
Произведен полный рефакторинг кода, объединен функционал 1.2 и 1.3, добавлены возможности более гибких настроек.
Настраиваемая реакция на изменения в БД.
Добавлено управление режимов обработки ссылок
['commands']['allow'] = 'include' // 'exclude'
include включает кеширование всех линков, кроме указанных в exclude
exclude включает кеширование только линков указанных в include
При наличии обоих секций include и exclude, логика обработки такая
allow = include
линк обрабатывается только тогда, когда он ЕСТЬ в include ИЛИ его НЕТ в exclude.
allow = exclude
линк обрабатывается только тогда, когда он ЕСТЬ в include И его НЕТ в exclude.
версия 1.5.х
В планах.
Формирование одного CSS файла.
версия 1.6.х
В планах.
Будет добавлено управление настройками с помощью интерфейса в админке.