Транзитный кэш
Урок 11
В этом уроке рассмотрим важный механизм кэширования в WordPress – транзитный кэш. Как и в случае с любым кэшем, вы можете использовать транзиты для того, что хранить какие-либо данные, для получения которых требуется либо большое количество времени, либо ресурсов. Благодаря транзитам у вас есть возможность значительно ускорить получение этих данных. Также преимуществом является то, что транзитный кэш очищает сам себя в течение времени.
В видеоуроке же мы настроим транзитный кэш на запросы получения обновлений плагина.
Чтобы скачать плагин, который получился в процессе этого урока, нужно купить курс.
Очень классно транзиты вписываются в ситуации, когда нужно работать со сторонними API. Получение данных при помощи HTTP-запросов со стороннего сервера практически всегда занимает какое-то дополнительное время, транзитный кэш же позволяет сохранить ответ от стороннего API в базу данных (но не всегда в неё, при помощи плагинов можно ускорить транзиты и не хранить их в базе данных) и обращаться к нему супер-быстро. Кроме того, некоторые API ставят вам ограничение на количество запросов, что тоже получается обойти при помощи транзитного кэша.
Пример: у вас на сайте есть кастомный виджет погоды, который получает данные например с яндекс погоды при помощи API. Количество просмотров страниц вашего сайта допустим 5000 в сутки. В итоге ваш сайт сделает 5000 запросов к API погоды за сутки! Однако мы можем установить транзитный кэш на период времени например час, и тогда количество запросов к API будет…. 24! (так как в сутках 24 часа). Чувствуете разницу? Конечно, если вам нужно предоставлять более точные данные, то вы можете изменить время действия кэша до 30 минут или 15 минут, но даже тогда это будет всего 96 запросов вместо 5000.
/** * Получаем подписчиков с какого-то стороннего сервиса */ function true_get_subscribers() { // это ключ-идентификатор значения транзитного кэша $transient_key = 'true_subscribers'; // сразу же обращаемся к транзитному кэшу и пытаемся получить значение из кэша $transient = get_transient( $transient_key ); // Если значение в транзитном кэша существует, то мы возвращаем его и на этом всё if( false !== $transient ) { return $transient; // В кэше пусто? Тогда обращаемся к API } else { // Обращаемся к API $response = wp_remote_get( 'https://api.example.com/v4/subscribers' array( 'headers' => array( 'token' => 'example_token', ), ) ); // Сохраняем ответ из API в транзитный кэш set_transient( $transient_key, $response, DAY_IN_SECONDS ); // Возвращаем результат return $response; } }
Несколько моментов по коду:
DAY_IN_SECONDS
– это значит, что значение в кэше просуществует ровно 24 часа перед следующим обновлением. Полный список констрант времени – ниже.Константа | Значение |
---|---|
MINUTE_IN_SECONDS | 60 (1 минута) |
HOUR_IN_SECONDS | 3600, 60 * MINUTE_IN_SECONDS |
DAY_IN_SECONDS | 86400 24 * HOUR_IN_SECONDS |
WEEK_IN_SECONDS | 604800 7 * DAY_IN_SECONDS |
MONTH_IN_SECONDS | 2592000 30 * DAY_IN_SECONDS |
YEAR_IN_SECONDS | 31104000 365 * DAY_IN_SECONDS |