Блог/Last-Modified

Заголовок 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)