В данной заметке представлены некоторые способы оптимизации сайта (увеличение скорости загрузки) основанные на использовании файла конфигурации .htaccess веб-сервера Apache. А именно - Gzip сжатие и Http-кэширование.


Gzip является самым популярным и эффективным методом сжатия в настоящее время. Этот метод позволяет в целом уменьшить размер ответа примерно на 70%. Страница сжимается на сервере и отправляется сжатой браузеру, который ее распаковывает.

Вставить в файл .htaccess:
# GZIP сжатие
<ifModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html 
AddOutputFilterByType DEFLATE text/css 
AddOutputFilterByType DEFLATE text/javascript 
AddOutputFilterByType DEFLATE application/javascript 
AddOutputFilterByType DEFLATE application/xml
</ifModule>
Приведенные в коде ресурсы (js,css и др.) перед отправкой в браузер клиента теперь будут сжиматься.
Для фрейморка yii2 вставлять приведенный код стоит в файл .htaccess находящийся в папке frontend\web.

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




HTTP кэширование - кэширование на стороне браузера.

1. Заголовок Cache-control с директивой max-age.
С помощью веб-сервера Apache устанавливаем период в секундах, на протяжении которого указанные ресурсы браузеру следует брать из своего кэша, а не скачивать с сервера.

Вставить в файл .htaccess:
# HTTP кэширование у клиента
<ifModule mod_headers.c>
    #кэшировать css, javascript и текстовые файлы на одну неделю
    <FilesMatch "\.(js|css|txt|ttf)$">
        Header set Cache-Control "max-age=604800"
    </FilesMatch>
    #кэшировать флэш и изображения на месяц
    <FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
</IfModule>

2. Заголовок Expired<br>Данный способ похож на предыдущий - с помощью веб-сервера Apache устанавливаем "срок годности" ресурсов, на протяжении которого изменение файлов не планируется.
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpg "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/gif "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType application/pdf "access plus 1 month"
  ExpiresByType text/x-javascript "access plus 1 month"
  ExpiresByType image/x-icon "access plus 1 year"
  ExpiresDefault "access plus 2 days"
</IfModule>

Проверить используется ли кэш браузера можно на этом сервисе, где должна появиться птичка на соответствующем пункте после сканирования страницы сайта. Там так же можно проверить и Gzip-сжатие.
И конечно проверить какие заголовки отсылает сервер браузеру, посмотреть скорость загрузки отдельного файла и страницы в целом можно с помощью стандартного отладчика браузера. Для его открытия, например, в Google Chrome нужно нажать правую кнопку мыши - "проверить" или сочетание клавиш Ctrl+Shift+I.

google debug

Примеры серверного кэширования для php-фреймворка Yii2 находятся по этой ссылке.