Время жизни
Последнее обновление Nov 2nd, 2019 | История страницы | Улучшить эту страницу | Сообщить о проблеме
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$194 per month—let's make that $500!
Learn moreОбщей необходимостью является способность контролировать, как долго должен жить сниппет данных - как долго, прежде чем срок его действия истекает и он больше не годится? Точно так же, как с бутылками молока, знание даты истечения срока действия может сказать нам, являются ли наши данные все еще хорошими или нам нужно пересчитать их.
Создадим сниппет¶
В этом примере мы собираемся создать сниппет, который хранит немного данных в течение короткого периода времени. Вставьте следующий сниппет кода в новый сниппет с именем «testCache», а затем сохраните его.
<?php
$cacheManager = $modx->getCacheManager();
$lifetime = 10; // in seconds
if (!$payload = $cacheManager->get('my_cache_key')) {
$payload = date('H:i:s');
$cacheManager->set('my_cache_key',$payload, $lifetime);
}
return $payload;
Хитрость в том, что вывод из cacheManager будет нулевым, если данные либо не существуют, либо истек срок их действия.
Вызовем сниппет¶
Когда вы вызываете сниппет, использующий пользовательское кэширование, как показано ниже, вы должны вызвать его некэшированным. Это обходит стандартные механизмы кэширования и позволяет вашему коду взять кэширование в свои руки.
[[!testCache]]
Посмотрим на результат¶
Обновляйте часто страницу, содержащую сниппет testCache, и смотрите на вывод информации. Вы должны заметить, что отметка даты обновляется только каждые 10 секунд!
Этот сниппет пишет в раздел default, поэтому очистка кэша сайта очищает его тоже. Именно поэтому исходных 10 секунд трудно заметить: после каждой очистки кэша вы получаете свежие 10 секунд. Увеличьте $lifetime до 60 секунд, чтобы увидеть истечение без очистки.
Данные в собственном разделе переживают очистку кэша сайта: refresh() очищает фиксированный список основных разделов, и раздел, которого в списке нет, не затрагивается. Передайте раздел в $options — см. Программное (пользовательское) кэширование.
Резюме¶
Установка пользовательских времен жизни для ваших кэшированных данных может быть отличным способом помочь вашему сайту снять нагрузку. Кэширование данных даже на одну или две минуты (или даже на несколько секунд) может иметь значение для нагрузки на сервер. В нашем примере мы рассчитываем текущую дату в демонстрационных целях, но подумайте о том, как этот метод может сэкономить циклы процессора, когда вычисляемые вами данные особенно тяжелы, например, интенсивный запрос к базе данных или медленный вызов API.
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$194 per month—let's make that $500!
Learn more










