назад Alt ←

Оператор cache

Сохранение результатов работы кода.

^cache[файл]
^cache[файл](число_секунд){код}
^cache[файл](число_секунд){код}{обработчик_проблем}
^cache[файл][дата_устаревания]{код}
^cache[файл][дата_устаревания]{код}{обработчик_проблем}
# вернуть дату устаревания
^cache[]

Оператор сохраняет строку, которая получится в результате работы кода. При последующих вызовах обычно происходит считывание ранее сохраненного результата вместо повторного вычисления, что сильно экономит время обработки запроса и снижает нагрузку на серверы.

Крайне рекомендуется подключать модули ^use[…] изнутри кода оператора cache, а не делать это статически @USE. По возможности следует работать с базой данных ^connect[…] также внутри кода оператора cache — это существенно снизит нагрузку на SQL-сервер и повысит производительность сайтов.

Файл — имя файла-кеша. Если такой файл существует и не устарел, то его содержимое выдается клиенту, если не существует — выполняется код, и результат сохраняется в файл с указанным именем.

Число секунд — время хранения результата работы кода в секундах. Если это число равно нулю, то результат не сохраняется, а файл с ранее сохраненным результатом уничтожается.

Дата устаревания — дата и время, до которого хранится результат работы кода. Если она в прошлом, то результат не сохраняется, а файл с предыдущим сохраненным результатом уничтожается.

Код — код, результат которого будет сохранен.

Обработчик проблем — здесь можно обработать проблему, если она возникнет в коде. В этом отношении оператор похож на try, см. раздел «Обработка ошибок». В отличие от try можно задать $exception.handled[cache] — это дает указание Parser обработать ошибку особенным образом: достать из файла ранее сохраненный результат работы кода, проигнорировав тот факт, что этот результат устарел. [3.1.2]

Возврат даты устаревания кеша доступно с версии [3.1.5]

Для принудительного удаления файла-кеша можно использовать:

^cache[файл]

Внутри кода допустимы команды, изменяющие время хранения результата работы кода:

^cache(число_секунд)
^cache[дата_устаревания]

Берется минимальное время хранения кода.

Текущую дату устаревания можно узнать, вызвав:

$expire_date[^cache[]]

Пример

^cache[/data/cache/test1.cache](5){
	Нажимайте reload, 
	меняется каждые 5 секунд: ^math:random(100)
}

Изменение времени хранения

^cache[/data/cache/test2.cache](5){
	по ходу работы выяснилось,
	что страницу сохранять не нужно: ^cache(0)
}

Вернуть дату устаревания

^cache[/data/cache/test3.cache][^date::today(1)]{
	…
	$expireDate[^cache[]]
	…
}

$expireDate будет всегда возвращать завтрашнюю дату.