Sky Cache (WordPress)

Под 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.х

В планах.
Будет добавлено управление настройками с помощью интерфейса в админке.