Вы можете использовать выходной фильтр в Smarty. Ниже приведен готовый код для ETag ging:
function etag_handler($output)
{
$etag = md5($output);
header('ETag: '.$etag);
if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && strpos($_SERVER['HTTP_IF_NONE_MATCH'], $etag) !== FALSE)
{
header($_SERVER['SERVER_PROTOCOL'].' 304 Not Modified');
return '';
}
return $output;
}
$smarty->registerFilter('output', 'etag_handler');
Поместите это где-нибудь до $smarty->display(...);
.
Обратите внимание, что с этим кодом сервер по-прежнему вычисляет вывод, но если у клиента уже есть идентичный ответ, сервер не будет отправлять его снова, так что это просто экономит сетевой трафик. Если вы хотите сэкономить вычислительную мощность на сервере, вам нужно заняться чем-то другим (кэширование), но вы можете объединить это с ETagging.