» » Увеличение скорости загрузки сайта на DLE (часть 2)

Увеличение скорости загрузки сайта на DLE (часть 2)

3.09
93
40 376
Увеличение скорости загрузки сайта на DLE (часть 2)

Все браузеры давно умеют кешировать статические данные (картинки, скрипты, css и т.д.), но для этого веб-сервер должен сообщить браузеру на сколько он должен кешировать эти данный с момента первого обращения к этим данным. Т.е. Если пользователь зашёл на сайт - загрузились к примеру 4 скрипта по 10кб - это 40кб, вроде бы не страшно, однако при каждом переходе по страницам сайта браузер будет загружать эти скрипты вновь и вновь, потому что думает, что скрипт обновляется при каждом обращении к нему. Поэтому логично "сказать" браузеру, что бы он проверял не обновился ли этот скрипт не при каждом обращении, а лишь раз в месяц или раз в год.

Как раз для указания "времени жизни" закешированных данных, правильной обработки HTTP-заголовков браузерами и предназначен этот код:
<IfModule mod_expires.c>
	ExpiresActive on

	ExpiresDefault "access plus 1 month"

	# cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
	ExpiresByType text/cache-manifest "access plus 0 seconds"

	# html
	ExpiresByType text/html "access plus 0 seconds"

	# XML
	ExpiresByType text/xml "access plus 0 seconds"
	ExpiresByType application/xml "access plus 0 seconds"

	# RSS
	ExpiresByType application/rss+xml "access plus 1 hour"

	# Favicon
	ExpiresByType image/x-icon "access plus 1 week"

	# Картинки
	ExpiresByType image/gif "access plus 1 month"
	ExpiresByType image/png "access plus 1 month"
	ExpiresByType image/jpeg "access plus 1 month"
	ExpiresByType image/jpg "access plus 1 month"

	# HTC файлы  (например css3pie)
	ExpiresByType text/x-component "access plus 1 month"

	# Нестандартные шрифты сайта
	ExpiresByType application/x-font-ttf "access plus 1 month"
	ExpiresByType font/opentype "access plus 1 month"
	ExpiresByType application/x-font-woff "access plus 1 month"
	ExpiresByType image/svg+xml "access plus 1 month"
	ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

	# CSS и javascript
	ExpiresByType text/css "access plus 1 year"
	ExpiresByType application/javascript "access plus 1 year"

</IfModule>

# Cache-Control браузера 
<ifModule mod_headers.c>
	# 30 дней
	<filesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
	Header set Cache-Control "max-age=2592000, public"
	</filesMatch>
	# 30 дней
	<filesMatch ".(css|js)$">
	Header set Cache-Control "max-age=2592000, public"
	</filesMatch>
	# 2 дня
	<filesMatch ".(xml|txt)$">
	Header set Cache-Control "max-age=172800, public, must-revalidate"
	</filesMatch>
	# 1 день
	<filesMatch ".(html|htm|php)$">
	Header set Cache-Control "max-age=172800, private, must-revalidate"
	</filesMatch>
</ifModule>

<IfModule mod_setenvif.c>
	#Эта конструкция для говнобраузера
	#Запрет отдачи HTTP-заголовков Vary
	BrowserMatch "MSIE" force-no-vary
	BrowserMatch "Mozilla/4.[0-9]{2}" force-no-vary
</IfModule>


Как видно код разбит на блоки-условия. Если какой то из используемых в коде модулей не включен - блок будет пропущен.
Так же в коде прокомментированы сроки, на которые кешируются статические данные и представлен фикс для IE.

Представленный код - результат сбора данных с разных источников и оптимизации его под DLE. Для подключения его нужно вставить в самое начало файла .htaccess и обновить кеш в админке.

Похожие материалы

Комментарии

nseregau
nseregau 16 декабря 2013 04:29
Скажите, вот если не использовать этот метод, то разве браузер не кеширует все по умолчанию?

прочитал уже что в зависимости от сервера :)
ПафНутиЙ
ПафНутиЙ 16 декабря 2013 08:44
указанным способом мы лишь даём рекомендации браузеру о том, что как бы желательно кешировать определённые файлы на определённое время. Браузер может выполнить их, а может и нет, это его дело. Конечно же он закеширует то, что считает нужным и без каких либо настроек (если не указанно обратное конечно же)
жирный_кот
жирный_кот 8 ноября 2014 13:27
Поставил данный код, но кэш в браузере не работает.
http://сайт.ру/engine/skins/default.js (не указан срок действия)
http://сайт.ру/templates/temp/dleimages/noavatar.png (не указан срок действия)
http://сайт.ру/templates/huts/dleimages/orating.png (не указан срок действия)
http://сайт.ру/templates/temp/images/ablink.png (не указан срок действия)
http://сайт.ру/templates/temp/images/abottom.png (не указан срок действия)
http://сайт.ру/templates/temp/images/apd_down.png (не указан срок действия)


Сервер апач.
ПафНутиЙ
ПафНутиЙ 8 ноября 2014 15:05
а соответствующие модули в апаче включены?
жирный_кот
жирный_кот 8 ноября 2014 16:18
Точно были выключены, сейчас все работает. smile
жирный_кот
жирный_кот 14 ноября 2014 18:12
Не по теме.

А такой код от досс атак если его вставить в .htaccess будет работать?

<IfModule mod_evasive20.c>
DOSHashTableSize 4096
DOSPageCount 5
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
</IfModule>
ПафНутиЙ
ПафНутиЙ 14 ноября 2014 21:16
думаю этот вопрос нужно задавать хостеру. Я не смогу ответить.
Abdula
Abdula 20 ноября 2014 23:37
Тоже самое и у меня!
Код поставил, но кеш не работает.
Павел подскажите пожалуйста, какие ещё внести правки, чтобы решить этот вопрос окончательно.
Спасибо!
Abdula
Abdula 20 ноября 2014 23:40
Пожалуйста напишите, какие модули нужно включить?
жирный_кот
жирный_кот 29 ноября 2014 03:20
Для ubuntu через терминал вкл.
a2enmod headers
a2enmod expires


Перезапустить апач.
ПафНутиЙ
ПафНутиЙ 30 ноября 2014 00:22
если используется nginx - настройки апача тут не помогут, нужно настраивать nginx
Obraz
Obraz 10 января 2015 19:45
Здравствуйте ПафНутиЙ.

Сделал все как в статье, но не получилось. Возможно, что это из-за хостинга http://2domains.ru/reghost.php тариф Host-1 ?
ПафНутиЙ
ПафНутиЙ 10 января 2015 19:49
Что конкретно не получилось?
Obraz
Obraz 10 января 2015 20:00
Я вставил в .htaccess код "<IfModule mod_expires.c>....", developers.google.com все равно показывает "Используйте кеш браузера".
ПафНутиЙ
ПафНутиЙ 10 января 2015 20:49
Значит у вас статику отдаёт nginx.
Настройте конфиг nginx по аналогии.
sneiks
sneiks 14 января 2015 02:21
Скажите пожалуйста есть ли смысл вот такова хака:???

Как ускорить загрузку сайта на DLE

Теперь нам нужно ускорить загрузку сайта. Ни для кого не секрет, что Google ранжирует сайты с быстрой загрузкой выше других, при прочих равных факторах это будет вашей палочкой-выручалочкой, так как многие DLE сайты долго грузятся, да еще и увешаны рекламой. Для этого вам необходимо открыть файл «/engine/clasess/templates.class.php» и найти строку:

function load_template($tpl_name) {

и после нее вставить:

if( $this->CacheTemplate[ $tpl_name ] )
{
$this->copy_template = $this->CacheTemplate[ $tpl_name ];
return true;
}

Затем найти строку:

$this->copy_template = $this->template;

и после нее вставьте:

$this->CacheTemplate[ $tpl_name ] = $this->template;
ПафНутиЙ
ПафНутиЙ 14 января 2015 02:37
Не уверен, что это даст ускорение сайту. Лучше картинки оптимизировать.
sneiks
sneiks 14 января 2015 02:38
Так же не могли бы дать пару советов как ускорить сайт. делал по вашим статьям...

https://developers.google.com/speed/pagespeed/insights/?url=www.xoxma.lv&tab=desktop
ПафНутиЙ
ПафНутиЙ 14 января 2015 22:23
первые два пункта надо выполнить (картинки и сжатие) обязательно. А вот средства выполнения - не подскажу, нужно смотреть сайт, то признаться желания совершенно нет.
Obraz
Obraz 3 марта 2015 14:44
Здравствуйте ПафНутиЙ.
Спасибо за статью, получилось ускорить сайт до 94 пунктов.

Вопрос:

1 сайт: Гугл пишет "Используйте кеш браузера" для следующего

"src="/engine/classes/min/index.php?f=/templates/Default/js/libs.js,/engine/ajax/board/board.js&amp;7">" и "href="/engine/classes/min/index.php?f=/templates/Default/style/styles.css,/templates/Default/style/engine.css&amp;7" />" и "<script type="text/javascript" src="/engine/classes/min/index.php?charset=utf-8&amp;g=general&amp;14"></script>"


2 сайт:

<script type="text/javascript" src="/engine/classes/min/index.php?charset=windows-1251&amp;g=general&amp;7"></script>


Вроде я сжал JS и вставил в самое начало файла .htaccess

Подскажите почему?
ПафНутиЙ
ПафНутиЙ 8 марта 2015 22:17
адрес сайта?
zharar
zharar 7 июня 2015 17:02
ПафНутиЙ,коды в каком месте поставить?
ПафНутиЙ
ПафНутиЙ 7 июня 2015 20:44
в начале .htaccess
rustamcom
rustamcom 23 июля 2015 08:24
Помогите с такое ситуации в developers.google.com есть пункт которые хочу исправить
https://mc.yandex.ru/metrika/watch.js (60 минут)
как это сделать
ПафНутиЙ
ПафНутиЙ 2 августа 2015 08:00
Попробуйте написать в техподдержку яндекс.метрики
Weboster
Weboster 19 сентября 2015 19:54
У меня связка nginx + apache Работает все без проблем.
Nginx работает как обратный прокся
Apelisin
Apelisin 27 ноября 2015 20:56
Показатели в Google повысились с 69 на 79. Работает отлично, спасибо!
anfalin
anfalin 29 февраля 2016 20:40
Для Nginx тоже есть решение
вставить в конфиг Nginx после строк
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {

это
expires 06M;


06M означает кэш будет хранится 6 месяцев
это конфиг можно отредактировать через панель ISP даже
Abdula
Abdula 9 июня 2016 18:34
Павел, подскажите пожалуйста, как решить вопрос с переносом файла стилей css?
Дело в том, что после переноса файла стилей вниз страницы, при загрузке страницы сайта грузится голый html, и где-то через 1-2 секунды уже подгружаются стили.
Можно ли каким-то образом положительно решить данный вопрос, чтобы, и файл стилей был внизу main.tpl и не было задержки загрузки стилей?

Буду благодарен за помощь!
ПафНутиЙ
ПафНутиЙ 9 июня 2016 20:57
файлы стилей вообще не стоит переносить вниз.

Добавить комментарий

Комментировать могут только зарегистрированные пользователи

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.