Заголовок Last-Modified в Modx Revoluton
Несколько лет назад я писал про правильную работу Modx Evolution с заголовком If-Modified-Since и Last-Modified и их важности в сокращении нагрузки на сервер. Дошли руки до внедрения данного подхода и к MODX Revolution. Больше информации можно найти в прошлом посте по Last-Modified, там больше теории, тут будет только реализация.
Для реализации данной технологии мы будем опираться на наше предыдущую разработку, но с учетом API Revolution. Код плагина:
<?php
if ($modx->event->name == 'OnWebPagePrerender') {
$dtm = ($modx->resource->get('editedon'))?strtotime($modx->resource->get('editedon')):strtotime($modx->resource->get('createdon'));
if(empty($dtm)) { return; }
//$modx->log(modX::LOG_LEVEL_INFO,$_SERVER['REQUEST_URI'].' use '.$dtm.' date');
if(!empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
$ltm = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
if($dtm <= $ltm){
header('HTTP/1.0 304 Not Modified');
header('Last-Modified: '.gmdate('D, d M Y H:i:s',$dtm).' GMT');
header('Cache-control: private, max-age=3600');
header('Expires: '.gmdate('D, d M Y H:i:s',time()+3600));
exit();
}
}
header('Last-Modified: '.gmdate('D, d M Y H:i:s',$dtm).' GMT');
header('Cache-control: private, max-age=3600');
header('Expires: '.gmdate('D, d M Y H:i:s',time()+3600));
return;
}
Создаем новый плагин, называем его LastModified, вешаем его на OnWebPagePrerender событие и все. Если хотим проверить корректность его работы то можно воспользоваться специальным сервисом проверки.
P.S. Внимательный читатель обратит внимание, что в коде есть закомментированная строчка. Если хотим проверить работу плагина, то раскомментируем эту строчку и получим регистрацию каждого вызова этого плагина в Error Log системы MODx.
UPDATE: залил код плагина LastModified на github.
Комментарии (0)