Якщо веб-ресурс розвивається і набуває “навороченості”, то при його завантаженні браузер генерує запити до сервера, підвантажуючи HTML-сторінку, CSS файли, скрипти, графіку. Так як на різних сторінках елементи оформлення повторюються, доцільно запровадити кешування таких файлів браузером користувача.
Можна, звичайно, генерувати заголовки типу
header( 'Cache-Control: max-age=604800 ');
header( 'Expires: Sun, 31 May 2009 07:09:57 GMT ');
Але це підходить для динамічного контенту. Якщо сторінки статичні також, варто скористатись розширенням apache mod_expires. Детально все розписано по цьому посиланню, а я коротко підкреслю, в чому суть.
Модуль повинен бути встановлений та включений хостером. В файлі .htaccess можна використати як приклад наступні параметри кешування:
# Включаємо модуль
ExpiresActive On
# говоримо модулю, що всі типи контенту кешуються 1 хвилину з моменту завантаження. Допомагає, якщо відвідувач сайту швидко обновляє сторінку. Йому віддається сторінка з кешу браузера, і навантаження на сервер знижується.
ExpiresDefault “access plus 1 minutes”
# Скрипти окремими файлами кешуємо тиждень – вони і так не змінюються
ExpiresByType application/javascript “access plus 1 week”
ExpiresByType application/x-javascript “access plus 1 week”
ExpiresByType text/javascript “access plus 1 day”
# HTML не кешуємо взагалі
ExpiresByType text/html “now”
# А всяку дрібноту можна
ExpiresByType text/xml “access plus 1 minutes”
ExpiresByType text/css “access plus 1 week”
ExpiresByType text/plain “access plus 1 week”
# Зображення теж рідко змінюються, мають статичні імена, хай тиждень полежать в кеші.
ExpiresByType image/gif “access plus 1 week”
ExpiresByType image/jpg “access plus 1 week”
ExpiresByType image/jpeg “access plus 1 week”
ExpiresByType image/png “access plus 1 week”
ExpiresByType image/bmp “access plus 1 day”
# A36000 означає, що флеш кешуватиметься 36000 секунд від моменту завантаження.
ExpiresByType application/x-shockwave-flash A36000
Додам ще, що можна вказувати період кешування не від моменту доступу до файлу, а від моменту його зміни
ExpiresByType image/gif "modification plus 5 hours 3 minutes"
В мене щось не працювало.
В результаті маємо зменшення кількості вихідного трафіку, якщо хостер обмежує. Бережемо трафік відвідувача. Зменшуємо час завантаження сторінки, за рахунок того, що браузер не робить запитів, а моментально підвантажує з кеша. Зменшуємо навантаження на сервер.
Якщо закешований файл змінився на стороні сервера, по ідеї в відвідувача не обновиться, якщо в кеші є стара версія. Але на практиці нормально обновляє.