Last Modified

Всем привет!

Прочитал вот здесь, что HTTP заголовок круто сокращает время обхода робота и помогает быстрее новым страницам попадать в индекс. Мне показалось,что использование Last Modified было бы не лишним у нас на сервере ( да и у других пользователей), вопрос куда это всё вставлять? Наверняка есть файлик с хедерами для всего сайта вцелом, типа языка, мета тегов?

Я попробовал сделать отдельный файл Test.php, вставил туда этот скрипт, проверился на сайте и ничего не вышло. Нашел на форуме точно такой же вопрос, но человека переубедили этого не делать, а я всё же хочу поставить и протестировать.

Вот код:

<?php
$LastModified_unix = 1294844676; // время последнего изменения страницы
$LastModified = gmdate("D, d M Y H:i:s \G\M\T", $LastModified_unix);
$IfModifiedSince = false;
if (isset($_ENV['HTTP_IF_MODIFIED_SINCE']))
    $IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));  
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
    $IfModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
if ($IfModifiedSince && $IfModifiedSince >= $LastModified_unix) {
    header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
    exit;
}
header('Last-Modified: '. $LastModified);
?>

Тоже столкнулся с этой затеей и реализовал ее.

Проверял через сервис https://last-modified.com/ru/last-modified-if-modified-since-php.html
Оба раза ответ ок :slight_smile:

Добавил пару строк в индекс.тпл, а этот код вынес в отдельный файл в папке app\functions\smarty_plugins\

В индексе сделал так:

{if $product}{lastmodified time=$product.updated_timestamp}
{elseif $page}{lastmodified time=$page.timestamp}
{elseif $category_data}{lastmodified time=$category_data.timestamp}
{/if}

app\functions\smarty_plugins\function.lastmodified.php

<?php use Tygh\Registry; function smarty_function_lastmodified($params) { $time=$params['time']; $LastModified_unix = strtotime(date("D, d M Y H:i:s", $time)); $LastModified = gmdate("D, d M Y H:i:s \G\M\T", $LastModified_unix); $IfModifiedSince = false; if (isset($_ENV['HTTP_IF_MODIFIED_SINCE'])) $IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5)); if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) $IfModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5)); if ($IfModifiedSince && $IfModifiedSince >= $LastModified_unix) { header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified'); exit; } header('Last-Modified: '. $LastModified); }
1 лайк

А реальный результат, кроме проверки, есть?

Не знаю как это скажется в целом на нагрузке, но как мне кажется на глаз - в браузере у меня быстрее стало, если например между двумя карточками товара переключаться влево-вправо.

Общая суть этой доработки как раз в том, чтобы задействовать кеш на стороне клиента, и вместо повторной загрузки страницы сказать ему “304 - ничего не менялось”.

А еще это важно для момента, когда роботы обход делают - есть мнение, что они охотнее будут обновления подтягивать с сайта :slight_smile:

В целом интересно тоже что будет.
Только для запуска надо учесть много других факторов: те же мета теги, которые могут изменятся модулями и т.д. и т.п…

Со страницами пока не знаю, а вот с продуктами все просто по идее - это поле будет обновляться при каждом обмене, поэтому долго неактуальная информация не провисит.

Есть модуль, если понадобится такой функционал без правки ядра: https://store.retailfactory.ru/moduli-dlya-cs-cart/last-modified-304-not-modified/

1 лайк

Добрый день ребята!:hugs:
Подскажите, кто использует или вообще стоить этот модуль использовать Last-Modified + 304 Not Modified
https://marketplace.cs-cart.com/last-modified-304-not-modified.html