Идея web кеширования очень проста: получить динамичный контент, сохранить его в статичный файл и выдавать этот статичный файл при каждом запросе.
Пакет включается в LIMB приложение как фильтр lmbFullPageCacheFilter
следующим способом
class LimbApplication extends lmbWebApplication { function __construct() { $this->registerFilter(new lmbHandle('limb/web_cache/src/filter/lmbFullPageCacheFilter.class.php')); parent::__construct(); } }
При первом запросе, которому соответствует кеширующее правило, пакет сохраняет то что выводится в браузер и в следующий раз напрямую выдаст эти данные, причём остальные фильтры в приложении не сработают. Благодаря этому скорость работы приложения заметно повышается.
Однако надо иметь ввиду, что вместе с системой кеша возникает проблема его обновления. Пакет WEB_CACHE имеет несколько методов, которые удобно использовать при изменении данных в административной панели. Например где то в контроллере можно написать что-то вроде
function _onAfterSave() { $cache_writer = new lmbFullPageCacheWriter( lmb_env_get('LIMB_VAR_DIR') . '/fpcache/'); $cache_writer->flushAll(); }
Для настроек путей по умолчанию используется full_page_cache.ini, который имеет следующие настройки
Регулярное выражение запроса. Для проверки подставляется путь из запроса. То есть при таком запросе http://example.com/some/path?arg=1
будет проверяться строка /some/path
Пример правила для кеширования главной страницы
[main_page] path_regex = ~^/$~ type = allow
Указывает кешировать allow
или нет deny
данный запрос
Пример правила для запрета кеширования
[main_page] path_regex = ~^/document/xml$~ type = deny
С помощью этих опций задаются параметры запроса для соответствия правилу. Значение «*» означает как минимум один параметр в запросе, значение «!» означает ни одного параметра.
Данное правило означает, что кеширование сработает для пути /document
с любым GET, POST и COOKIE(?) параметром. Однако оно не сработает без параметров в запросе
[main_page] path_regex = ~^/document$~ type = allow request = *
Такое правило будет кешировать страницу, только если нет POST запроса
[main_page] path_regex = ~^/contacts$~ type = allow post = !
Также можно указать названия параметров
[main_page] path_regex = ~^/search$~ type = deny get[q] = *
Для совсем точного соответствия можно указать ещё и значения параметров
[main_page] path_regex = ~^/page$~ type = allow get[foo] = 1 get[bar] = 2
Смещение в пути, начиная с которого проверяется регулярное выражение из path_regex
Правило сработает для http://example.com/document/map
[sitemap] path_offset = /document path_regex = ~^/map~ type = allow
Обсуждение