Я тут недавно потюнил .htacess на предмет увеличения скорости загрузки блога. По-моему субъективному мнению скорость загрузки действительно возросла. Плюс дополнительные настройки работы с кэшем. Вообщем решил поделиться полезными алгоритмами.
Включаем компрессию
Как уже наверняка, многие знаю, последние версии практически всех Интернет-браузеров поддерживают возможность разархивировать контент, переданный веб-сервером в формете gzip, на лету. Можно воспользоваться этой фишкой и предварительно сжимать gzip’ом страницы блога перед отправкой их конечному посетителю . Для этого, правда, понадобится наличие подлкюченного Apache-модуля mod_gzip. Если ваш хостер включил данный модуль по-умолчанию, то вы можете заставить его работать, добавив следущие строки к .htaccess:
[php]
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>
[/php]
Очевидно, что теперь все текстовые файлы, а также ресурсы указанных mime-типов будут сжиматься алгоритмом gzip.
Если же модуль не подключен, то этот вариант не сработает. Однако есть запасной вариант, правда достаточно ресурсоёмкий:
php_value output_handler ob_gzhandler
Добавляем окончание кэширования на будущее и управляем кэшем
Идём дальше. При первом посещении вашего сайта браузер посетителя выполняет несколько запросов к серверу (пока скачаются необходимые файлы, скрипты, изображения). Чтобы этого не происходило каждый раз, вы с помощью заголовков Expires и Cache-Control сможете кэшировать такие файлы. После чего лишние запросы к серверу не будут осуществляться при последовательном просмотре страниц.
Чтобы настроить заголовки Expires необходимо добавить следующие строки в файл .htaccess:
[php]
<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 3600 seconds"
ExpiresByType text/html "access plus 3600 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 604800 seconds"
ExpiresByType application/x-javascript "access plus 604800 seconds"
</ifModule>
[/php]
Как вы видите практически файлы всех типов, кроме text/html будут кэшироваться и срок их хранения достаточно долгий (ну не каждый же час меняются, например, изображения).
Теперь, что касается Cache-Control. Этому заголовку подчиняются все кэширущие системы в независимости от того осуществляется ли запрос к серверу или ответ от него. Настраиваем заголовок добавление следующих строк всё в тот же файл .htaccess:
[php]
<ifModule mod_headers.c>
# 30 дней
<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>
# 7 дней
<filesMatch "\.(css|js)$">
Header set Cache-Control "max-age=604800, 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=3600, private, must-revalidate"
</filesMatch>
</ifModule>
[/php]
Заметим, что теперь файлы изображений будут кэшироваться на всех публичных кэш-уровнях в течение 1 месяца. Файлы каскадных таблиц и javascript-кода могут изменяться чаще, чем изображения, поэтому срок нахождения их в кэше поменьше, и т.д. Кстати, private никоим образом не означает конфиденциальность контента, этот ключ лишь говорит каким образом будет кэшироваться объект.
Выключаем проверку объектных тегов ETag
Объектные теги или entity tags (ETag) представляют собой механизм проверки на наличие новой версии кэшированного файла. Так вот, удаляя заголовок ETag, вы говорите кэширующим серверам и браузеру, чтобы они не проверяли наличие новых версий кэшированных файлов, т.е. они должны полагаться только на заголовки Cache-Control и Expires. Однако не рекомендуется отключать ETag для html-страниц. Ниже приведены строки, которые нужно добавить в .htaccess:
[php]
<ifModule mod_headers.c>
<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header unset ETag
FileETag None
</filesMatch>
</ifModule>
[/php]
Удаляем заголовок Last-Modified
В дополнение ко всему выше упомянутому вы можете удалить запросы If-Modified-Since и If-None-Match, а также ответы на них 304 Not Modified. Сделать это можно удалением заголовка Last-Modified, чтобы проверка на измененное содержание не осуществлялась до тех пор пока об этом не объявит заголовок Expires. Добавляем строки:
[php]
<ifModule mod_headers.c>
Header unset Last-Modified
</ifModule>
[/php]
Внеся все эти изменения в файл .htaccess скорость загрузки вашего блога увеличится, а трафик уменьшится.
Источник mirsaytov.net