akiyatkin / boo
Серверное кэширование с ручным избирательным обновлением
Installs: 1 781
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
Requires
- akiyatkin/fs: ~1
- infrajs/access: ~1
- infrajs/ans: ~1
- infrajs/load: ~1
- infrajs/once: ~1
- infrajs/path: ~1
- infrajs/rest: ~1
- infrajs/router: ~1
- infrajs/sequence: ~1
README
Кэширования результата при работе с удалёнными хранилищами, обращение, к которым требует значительного времени, такими как Google Drive.
Рекомендуется использовать на небольших сайтах (10 000 кэшей), когда администратор вносит изменения на удалённом хранилище и сбросив нужный кэш применяет изменения на сайте. Целесообразно применять в тех случаях, когда нет возможности настроить обратную связь для автоматического обновлениея кэша. Ручное и избирательное управление кэшем является ключевой особенностью Boo-кэша.
Поддерживаются вложенные кэши и повторное исплользование, когда в дереве зависимостей у экземпляра кэша несколько родителей. Во всех случае кэшируемая функция выполняется один раз. При обновлении зависимых кэшей обновляются и все родительские кэши.
Установка через composer
{ "require":{ "akiyatkin/boo":"~1" } }
- Должен быть .htaccess с настроенной переадресацией для адресов начинающихся с символов
!~-
согласно правилам infrajs/router, чтобы в проекте работал адрес /-boo/. Совместим с любыми другими роутерами или фреймворками.
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/[-~\!]
RewriteRule ^(.*)$ vendor/infrajs/router/index.php [L,QSA]
- Необходимо настроить права для упраления кэшем. Для этого создать в корне проекта конфигурационный файл .infra.json. Для сервера 127.0.0.1 разрешение есть автоматически, но на других серверах нужно будет указать ip адрес в секции access.test или
true
для общего доступа к интерфейсу управления кэшем. Доступом управляет расширение infrajs/access.
Файл .infra.json
{ "access":{ "test":true } }
-
В скрипте, который работает с расширением Boo рабочая дирректория должна вести на корень проекта. Если скрипт лежит во вложенной папке должна быть команда
chdir('../');
согласно требованиям infrajs/path -
Для того чтобы работал параметр
?-boo
в адресной строке скрипта требуется выполнениеRouter::init()
, или обращение по адресу с символом -, тогда роутер подключается автоматически и рабочую дирректрию также не нужно менять она всегда будет от корня, вне зависимости от расположения файла скрипта.
Использование
use akiyatkin\boo\Cache; $args = array($one, $two); //простые, необязательные параметры идентифицирующие кэш $data = Cache::exec('Group title', function ($one, $two) { $data = sleep(5); //Что-то долгое //$one и $two чаще всего какие-то идентификаторы. //Можно указать более понятный title для кэша текущей обработки Cache::setTitle($title); return $data; //нерекурсивные кэшируемые данные }, $args);
Функция сохраняет кэши и позволяет выборочно обновлять их по адресу /-boo/
(С правами тестировщика infrajs/access и настроенным роутером infrajs/router)
Для работы GET-параметра -boo скрипт должен вызываться или с символа - или содержать инициализацию роутера.
Записки разработчика
Cache сохраняет кэш на жёстком диске в папке !boo/
. Описание кэш-элементов для которых предусмотрена админка (BooCache) хранится в !boo/.tree.json
.
item.result, item.conds, item.childs восстанавливаются и их без выполнения нельзя получить из исходных данных кэш-функции. Если есть conds, то childs не нужен.
Лучше аргументы conds получитать в проверяющей функции, чем сохранять в condsarg. condsarg закэишрует значения аргументов и может сложиться, что будут использоваться старые значения, например если аргументы формируются из конфига. Запомнились в кэше, а потом конфиг был изменнён и обновления сайта произойдёт только после -update=true, так как аргумент к проверяющей фукции будет неизменным.
/-update/
- Выполняет установку без удаления кэша
?-update=true
- Удаляет весь кэш
test = true
- Проверки запускаются, кэш перегенерируется для обычного пользователя
debug = true
, ?-access = true
, admin = true
- Запускают проверки, некоторые кэши не сохраняются и не обновляются. Например несжатый html и css в кэш не попадают.
?-boo = true|root|id
- Работает только с test=true
. Проверки запускаются, некоторые проверки true. - элементы перегенерируются для пользователя.
-start/start
- Работает только с test=true
. Все проверки true - все эелменты перегенерируются.
При обращение к базе данных срабатывает заголовок nostore, который отменяет сохранение кэша и нужно вызвать Nostore::off()
если обращение к базе не должно запрещать кэш и написать проверку обновления используемых из базы данных.
Флаги кэш-элементов
- nostore
- checked
- loaded
- start
Динамические свойства кэш-элементов
- childs
- time
- timer
- result
- conds
Статические свойства кэш-элементов
- id
- gid
- cls
- src
- gtitle
- title
- condfn
- condargs
- args
- hash
Контакты
Задать вопрос можно в группе ВКонтакта https://vk.com/infrajs или в issues на github.