Katyara

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

19 posts in this topic

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

 
 

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

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

Share this post


Link to post
Share on other sites

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

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

aesculapius likes this

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

 

 

 

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

Вы написали: 

 

 

 

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

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

 

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

Share this post


Link to post
Share on other sites

Вы написали: 

 

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

 

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

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

Share this post


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 прописать, выставить/удалить нужные файлы и время прописать нужное. Как-то так, мне в статических сайтах помогает ;)

Share this post


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 например месяц

Share this post


Link to post
Share on other sites

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

 

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

Share this post


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

Share this post


Link to post
Share on other sites

<!-- 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, а потом "Ой, мама роди меня обратно, что же делать"  :) 

Share this post


Link to post
Share on other sites

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

удалять код)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.