Jump to content

Кэширование на стороне браузера.


Recommended Posts

Здравствуйте. Подскажите, пожалуйста, как сделать кэширование на стороне браузера, сайт сделан на CMS Dle 10.4

Link to post
Share on other sites

Гуглите кэширование htaccess, а потом пишите этот код хостеру т.к. вы может не сможете поставить самостоятельно (из личного опыта, на один сайт поставил, а на два других пришлось писать хостеру)

Link to post
Share on other sites

Читал эту статью, но вот где прописывать заголовок Expires, в <head></head> при прописании например ссылки на css-файл или где?

 

Гуглите кэширование htaccess, а потом пишите этот код хостеру т.к. вы может не сможете поставить самостоятельно (из личного опыта, на один сайт поставил, а на два других пришлось писать хостеру)

 

Спасибо, попробую.

Link to post
Share on other sites

Читал эту статью, но вот где прописывать заголовок Expires, в <head></head> при прописании например ссылки на css-файл или где?

 
 

Спасибо, попробую.

В .htaccess почему я и сказал, что сами будете долго разбираться, если не разу не делали.

Link to post
Share on other sites

Гуглите кэширование htaccess, а потом пишите этот код хостеру т.к. вы может не сможете поставить самостоятельно (из личного опыта, на один сайт поставил, а на два других пришлось писать хостеру)

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

Link to post
Share on other sites

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

Ну после обращения в сапорт включают

Link to post
Share on other sites

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

Есть такое дело. На mchost  выключены модули, для того чтобы работало кеширование на стороне браузера. Вот что мне ответили по этому поводу:

 

 

 

Для включения кеширования необходимо выключать обработку статических файлов посредством NGINX но это не увеличит скорость загрузки и обработки сайта, так как у нас работает максимально оптимизированная схема и может привести к повышению нагрузки создаваемой сайтом. Мы можем включить модули, о которых вы пишите, но не рекомендуем этого делать.
Link to post
Share on other sites

Есть такое дело. На mchost  выключены модули, для того чтобы работало кеширование на стороне браузера. Вот что мне ответили по этому поводу:

 

этот ответ вообще мне непонятен) ладно не суть..

Link to post
Share on other sites

этот ответ вообще мне непонятен) ладно не суть..

Вы написали: 

 

 

 

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

Так вот, иногда многие модули на хостингах отключены. Как было и в моём случае. Я написал в тех. поддержку и их включили. 

 

Тему можно закрыть, спасибо всем за помощь.

Link to post
Share on other sites

Вы написали: 

 

Так вот, иногда многие модули на хостингах отключены. Как было и в моём случае. Я написал в тех. поддержку и их включили. 

 

Тему можно закрыть, спасибо всем за помощь.

я имею в виду ответ тех. поддержки непонятен, утверждать что браузерное кэширование не увеличит скорость загрузки и обработки сайта.

Link to post
Share on other sites
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|woff|swf)$">

Header set Cache-Control "max-age=290304000, public"

</FilesMatch>

 

в .htaccess прописать, выставить/удалить нужные файлы и время прописать нужное. Как-то так, мне в статических сайтах помогает ;)

Link to post
Share on other sites

чтобы страница грузилась с кеша браузера, нужно в header.php или index.php самой первой строкой  прописать

 

<!-- Last-Modified -->

<?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);

?>

<!-- /Last-Modified -->

 

 

тогда при переходе на страницу, браузер получит ответ 304 (не изменялась с последнего посещения) и загрузится кешированная версия

 

проверить, правильно ли отдается 304 ответ можно тут

https://webmaster.yandex.ru/server-response.xml?url=

 

выбрать добавить заголовок If-Modified-Since например месяц

Link to post
Share on other sites

Не буду спорить насчет магии хостинга, но для джумлы, например, я сделал специальную систему, которая собирает все стили и скрипты до кучи, а при запросе проверяет (в зависимости от настроек) срок годности файлов. И спасибо за вопрос - теперь немного переделаю свою систему, чтобы не зависила от прихоти хостинга (выдавала код "no modify", если срок не истек).

 

Кстати, файлы типа .css?v=2 браузер не кэширует.

Link to post
Share on other sites
Вот архив.
 

Проверяются файлы картинок, стилей и скриптов, и html, а для других (мало ли что!) выдает forbidden

if( $fileinfo['extension']!='gif'
        && $fileinfo['extension']!='png'
        &&  $fileinfo['extension']!='jpg'
        && $fileinfo['extension']!='jpeg'
        && $fileinfo['extension']!='js'
        && $fileinfo['extension']!='css'
        && $fileinfo['extension']!='html')

 

Просто распаковать в нужную директорию и все. htaccess сам перенаправит на expires.php

expire.zip

Link to post
Share on other sites
  • VIP

<!-- Last-Modified -->

<?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);

?>

<!-- /Last-Modified -->

Разве этот код не вызовет ошибку Cannot modify header information - headers already sent by бла-бла-бла? Ведь заголовок должен первый уходить, а только потом выводиться на экран что-либо. Сейчас просто скопируют код 1 к 1, а потом "Ой, мама роди меня обратно, что же делать"  :) 

Link to post
Share on other sites

Разве этот код не вызовет ошибку Cannot modify header information - headers already sent by бла-бла-бла? Ведь заголовок должен первый уходить, а только потом выводиться на экран что-либо. Сейчас просто скопируют код 1 к 1, а потом "Ой, мама роди меня обратно, что же делать"  :) 

удалять код)

Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...