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

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

3.09
93
39 996
Увеличение скорости загрузки сайта на 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 и обновить кеш в админке.

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

Комментарии

Artyom91
Artyom91 8 сентября 2016 09:16
Павлик привет. Оптимизирую сайт по данным Google PageSpeed. Так вот, при использовании твоего кода данные в браузере не кешируются ну или не указан нужный период, в общем Google PageSpeed выдает вот такое:

https://мойсайт/…min/index.php?charset=utf-8&g=general&19 (2 дня)
https://мойсайт/…ine/modules/light_chat/assets/styles.css (2 дня)
https://мойсайт/…emplates/Default/css/main-stylesheet.css (2 дня)
https://мойсайт/…gine/modules/light_chat/assets/libs.js&7 (2 дня)

При использовании кода, который я нашел в интернете, там было указано, вставить его в самый конец файла .htaccess эти ресурсы (CSS и JS) пропадают, остаются только внешние скрипты, но с ними я уже поборолся.

Так вот, может посмотришь код из интернета, что-то в своем исправишь, чтобы грамотно работало с DLE.

Спасибо.

### Сжать ответ сервера для перечисленных MIME типов
<ifModule mod_deflate.c>
  <IfModule mod_filter.c>
      AddOutputFilterByType DEFLATE text/plain text/html
      AddOutputFilterByType DEFLATE text/css
      AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript
      AddOutputFilterByType DEFLATE text/xml application/xml application/xhtml+xml application/rss+xml
      AddOutputFilterByType DEFLATE application/json
      AddOutputFilterByType DEFLATE application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon
  </ifModule>
</ifModule>


### Способ #1
### Подсказать браузеру схему кеширования через заголовки в ответе сервера
<ifModule mod_headers.c>
    # 43200 - день, 604800 - неделя, 2592000 - месяц
    <FilesMatch ".(html|js|css)$">
	Header set Cache-Control "max-age=2592000"
        #Header unset Last-Modified
    </FilesMatch>
    <Files *.txt>
	Header add Cache-Control "max-age=43200"
    </Files>
    <FilesMatch ".(flv|swf|ico|gif|jpg|jpeg|png)$">
	Header set Cache-Control "max-age=2592000"
    </FilesMatch>
    <FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
	# отключить кэширование
	Header unset Cache-Control
    </FilesMatch>
</IfModule>
ПафНутиЙ
ПафНутиЙ 8 сентября 2016 09:43
Статья описывает общие случаи, однако статику следует раздавать через nginx, это эффективнее и быстрее.
Artyom91
Artyom91 9 сентября 2016 23:33
ПафНутиЙ, В nginx стоит сжатие gzip, это ведь не то?

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

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

Информация

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