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

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

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

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

Комментарии

ПафНутиЙ
ПафНутиЙ 1 ноября 2012 07:25
А почитайте что сам pagespeed по этому поводу говорит)
Вы проверяете 3 совершенно разных сайта, естественно будут разные показатели, и факторов, влияющих на эти показатели - вагон. Так что это вполне нормально, т.е. не сосем хорошо иметь 56, нужно стремиться к более выоким показателям.
alucard
alucard 11 декабря 2012 03:27
А на nginx+apache работать будет?
ПафНутиЙ
ПафНутиЙ 11 декабря 2012 07:36
нет, nginx отдаёт статические файлы без участия php, поэтому .htaccess не обрабатывается.
abasive
abasive 16 января 2013 18:48
Если сайт динамический стоит ли использовать кеш браузера? ведь он каждый день обновляеться и посетители не увидят новые добавленные новости, если я не прав исправьте.
Arsen
Arsen 16 января 2013 22:41
Цитата: abasive
Если сайт динамический стоит ли использовать кеш браузера? ведь он каждый день обновляеться и посетители не увидят новые добавленные новости, если я не прав исправьте.

Посетители увидят новые новости, ведь браузер каширует лишь изображения, а при появлении новых заносит их в кэш. У меня на сайте все нормально, сайт обновляю ежедневно. Проверял на разных компах и в разных браузерах.
abasive
abasive 16 января 2013 23:22
У меня на сервере стоит apache+nginx, ставил такой код в .htaccess но всеравно google page speed пишет что включите кеш браузера
ПафНутиЙ
ПафНутиЙ 17 января 2013 11:29
у nginx свои файлы конфига, а .htaccsess - конфиг апача.
Т.к. на связке nginx+apache статику отдаёт nginx особого смысла кешировать нет т.к. нужные файлы браузер сам кеширует, а nginx работает крайне быстро и грузит систему в разы меньше, чем апач.
my-myxa
my-myxa 17 февраля 2013 23:18
Во первых СПАСИБО!!! Первый раз задумался над скоростью загрузки! Благодаря двум постам изменился показатель с 34 до 79!!!! Реально круто!!!

Но появился и вопросик! как можно качественно и, желательно попроще, сжать картинки уже используемые на сайте??? как в новостях так и в ЦСС???

И еще раз спасибо!!
ПафНутиЙ
ПафНутиЙ 17 февраля 2013 23:53
На здоровье )
Как то передо мной ставилась подобная задача, нашёл решение с помошью программы FSViewer там в масовых действиях над фотками есть возможность сохранять структуру папок.
Там образом можно выкачать папку uploads с сайта и массово перегнать картинки в нужное качество.
Но, если честно, не вижу в этом смысла, при сегодняшних скоростях интернета.
Slavchik
Slavchik 12 марта 2013 08:17
в PageSpeed Insights пишет ...Следующие открытые для кэширования сжимаемые ресурсы должны иметь заголовок Vary: Accept-Encoding: тут ссылка на js файл.

можно еще это добавить
<IfModule mod_headers.c>
<FilesMatch "\.(js|css|xml|gz)$">
Header append Vary: Accept-Encoding
</FilesMatch>
</IfModule>
tuxo
tuxo 13 марта 2013 16:04
В связке nginx+apache будет достаточно включить Кэширование через nginx на 30 дней. Существенно повысит скорость сайта.
ПафНутиЙ
ПафНутиЙ 13 марта 2013 16:06
Если можно - по подробнее об этом. Конкретной информации я не нашёл.
ov3r
ov3r 14 марта 2013 12:30
Тоже хотел бы узнать, у самого nginx+apache, не знаю как включить кэширование.
sk
sk 17 марта 2013 16:57
Пафнутий, а код добавлять в .htassecc до или после
DirectoryIndex index.php

RewriteEngine On
ПафНутиЙ
ПафНутиЙ 17 марта 2013 17:04
Разницы нет, можно добавить в самое начало файла.
sk
sk 17 марта 2013 17:19
Поставил в самое начало, понизился на 1 пункт (
В списке высоких приоритетов все картинки, css и java - написано (не указан срок истечения действия).

Кэш обновлял.
ПафНутиЙ
ПафНутиЙ 17 марта 2013 18:05
Если речь о карате-сайте, то у вас сервер nginx - для него этого не нужно делать, он статику замечательно отдаёт без дополнительных плясок с бубнами)
Но как вариант - можно настроить и nginx
sk
sk 17 марта 2013 19:08
ПафНутиЙ,
Спасибо, понял
Gamer
Gamer 21 августа 2013 16:29
Добрый день! ПафНутиЙ
Нужен совет, и что надо сделать, есть сайт last-gamer.com, у него проблема с скоростью загрузки, снимал рекламу под 0, но всё ровно долго грузит, хостинг норм., вот на что гугл ругается по скорости http://developers.google.com/speed/pagespeed/insights/?url=http%3A%2F%2Flast-gamer.com%2F, сделал по первой части Включить Gzip сжатие JS файлов, ну и по второй тоже сделал как вы описали, но скорость сайта всё ровно храмает, помогите если не сложно.
Gamer
Gamer 21 августа 2013 21:47
Кстати пришлось снять сжатие и всё что было связанно с первой частью, добавив новость она почему очень долго появляется на хроме или мозиле, даже есть чистить кэш сайта, она на этих браузерах не появляется, ну если почистить кэш бразеров то появляются но это уже бред, чтоб посомтреть новые посты на сайте чистить каждый раз кэш в бразуере :(
ПафНутиЙ
ПафНутиЙ 21 августа 2013 23:20
для начала рекомендую установить расширение для хрома или FF, в хроме всё написано по русски. дальше уже по инструкциям.
Gamer
Gamer 22 августа 2013 16:06
ПафНутиЙ,
Хорошо спасибо
Abrikos
Abrikos 14 октября 2013 10:09
Добрый день! такой вопрос по ответу сервера у меня Server: Apache/2.2.23 (CentOS), но при вставке кода в файл, инструмент проверки скорости все равно пишет "Используйте кэш браузера", все модули которые используются в Apache установлены, в чем может быть дело ? И такой вопрос если Apache работает в связке с nginx то сервер все равно будет отдавать в заголовке Server: Apache/2.2.23 ? Да и дерективы же для mod_rewrite работают через .htaccess почему эти не срабатывают?
ПафНутиЙ
ПафНутиЙ 14 октября 2013 10:36
Если апач в связке с nginx, то для статики будет отдаваться заголовок nginx, а для динамики - apache.
Если есть возможность писать конфиг для nginx - можете самостоятельно добавить нужные правила для отдачи заголовков expire статике. Но я по этому поводу не очень переживаю т.к. nginx и без этого оч хорошо отдаёт статику.
Abrikos
Abrikos 14 октября 2013 11:16
По всей видимости связка apache+nginxи можно игнорировать то что pagespeed пишет о использовании кэша браузера? просто уж больно низкая оценка 51 всего
adminchik
adminchik 9 ноября 2013 06:12
Всем привет, оптимизировал сайт и при помощи http://developers.google.com/speed/pagespeed/insights установил рекорд для себя 85 из 100, остальное только уменьшить размер изображений, а при уменьшении теряется полностью качество. так что это максимальная оценка )) всем желаю такого ) вот сайт, но это просто для тестирования всяких модулей ) можете заценить ) http://buildingua.tk http://developers.google.com/speed/pagespeed/insights/?url=buildingua.tk&tab=desktop сейчас буду оптимизировать смартфон версию
ПафНутиЙ
ПафНутиЙ 12 ноября 2013 23:02
можно уменьшить без потери качества - есть много инструментов разных.
remont63
remont63 8 декабря 2013 12:35
Сегодня подключил все эти директивы, но прежде пришлось отключить nginx.

Затем прописал все директивы описанные выше в файл .htaccess Не работает.

Пошел дальше, проверил разрешено ли подключение модулей: expires и headers в папке: /etc/apache2/mods-enabled - оказалось что нет.

Подключился по ssh: ввел команды:
a2enmod headers
a2enmod expires


Перезапустил апач. Алилуя, pagespeed показал скорость загрузки 96 вместо 83 в стандартной версии сайта и 80 вместо 70 в мобильной версии.
ПафНутиЙ
ПафНутиЙ 8 декабря 2013 18:55
Лучше верните обратно nginx и правильно настройте его на отдачу статики. Nginx экономит огромнейшее количество ресурсов при работе со статикой, а если настроить конфиг и для отдачи заголовков по аналогии с апачем - тогда и pagespeed перестанет ругаться.
remont63
remont63 8 декабря 2013 23:13
Конечно верну, как разберусь с его настройками.

На данный момент, учитывая, что на сайте 1,5 гБ графики на апаче все гораздо быстрее работает.

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

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

Информация

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