Июл 10 2017


Для ускорения загрузки сайта можно использовать кэширование на сервере, включить gzip-сжатие, использовать постоянные HTTP-соединения (keep-alive) или даже использовать CDN, но этого мало — PageSpeed Insights от Google настойчиво предлагает включить для моего сервера кеширование в браузере.

Ну ОК, так и поступим.

Если у вас веб-сервер Nginx, просто пропишите в конфиге:

location ~* ^.+\.(jpg|jpeg|png|gif|ico|js|css|txt|pdf)$ {
root /var/www; # Путь к корню сайта
expires 3d; # кешируем на 3 дня
}

и радуйтесь ускорению. А вот если вы используете Apache, то идите под кат 😉

Чтобы включить кеширование в браузере, проверяем, подключены ли в Apache модули mod_headers или mod_expires. Для этого пишем в консоли
httpd -M |grep 'headers\|expires'

или ищем в конфиге Apache одну из следующих строчек:

LoadModule expires_module modules/mod_expires.so
LoadModule expires_module modules/mod_headers.so

Для установки модуля можно прописать в конфиге одну из строчек выше, или (для Debian/Ubuntu) ввести в консоли
a2enmod expires
или
a2enmod headers
и перезагрузить апач
service httpd restart

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

Если вы оставили модуль mod_headers, пишем в .htaccess следующее:

<ifModule mod_headers.c>
#10_min
<FilesMatch "\.(html|htm|php|xml|txt)$">
Header set Cache-Control "max-age=600, must-revalidate"
</FilesMatch>
#1_week
<FilesMatch "\.(ads|jcn|js|css)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
#1_month
<FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png|pdf)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
</IfModule>

Вот описание синтаксиса и параметров модуля mod_headers
Лично мне больше понравился этот модуль, mod_headers, но если вам захочется подключить и настроить модуль mod_expires, ничего сложного в этом нет.
Открываем .htaccess и пишем:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 day"
ExpiresByType application/javascript "access plus 1 week"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
</IfModule>

Вот описание синтаксиса и параметров модуля mod_expires

Google рекомендует использовать Expires вместо чем Cache-Control: max-age по причине его поддержки бОльшим числом клиентов, но тут уж дело вкуса и настроек сервера — если у вас обычный хостинг, хостеры вряд ли пойдут на добавление каких-то модулей в конфиги работающих серверов.

Прирост производительности можно увидеть на этих картинках с результатами тестов (картинки кликабельные):

webpagetest
Было: Стало:
 
PageSpeed Insights
Было: Стало:

Автор: Johnny Тэги: , ,

Блог саратовского админа

При использовании материалов сайта на других ресурсах прошу оставлять прямую ссылку на оригинал статьи.