Удалить Etags, если это возможно
Лучший метод кэширования - это max-age. W3C обязывает браузеры использовать максимальный возраст, если он доступен.
Когда используется максимальный возраст, браузер будет использовать кэшированную версию и даже не запрашивать сервер.
Это также означает, что если вы заменяете ресурс на своей веб-странице (например, CSS, JS, IMG, ссылка), вам следует переименовать ресурс.
Следующий лучший метод кэширования - Expires.
На каждой странице PHP с echo
неплохо всегда включать заголовок max-age
.
header('Cache-Control: max-age=31536000');
Это также разумно, (Пример типа контента только для HTML)
header('Content-Type: text/html; charset=utf-8');
header('Connection: Keep-Alive');
header('Keep-Alive: timeout=50, max=100');
У eTag нет срока действия. Ресурс нужно проверять каждый раз.
Если вы используете max-age или Expires, браузер не будет отправлять HTTP-запрос на проверку ресурса.
Когда он включен с max-age и expires, он тратит пространство слушателя и тратит несколько циклов ЦП сервера для генерации или поиска значения eTag.
Проблема с eTag заключается в том, что если ресурс не очень велик, он будет мало полезен. В HTTP-запросе время, необходимое для передачи данных, часто минимально по сравнению с временем соединения и ожидания.
С eTag браузер все еще должен выполнить HTTP-запрос. Если eTag не изменился, тогда ответ 304.
Вот типичный HTTP-запрос:
Только 3 миллисекунды для загрузки 2.9KB
Время запроса 454 миллисекунды. + 58мс DNS (очень быстро)
DNS Lookup: 58 ms
Initial Connection: 192 ms
Time to First Byte: 262 ms
Content Download: 3 ms
Bytes In (downloaded): 2.9 KB
eTag сэкономит 3 миллисекунды.
Если ресурс был кэширован, он освободил бы соединение для другого ресурса в дополнение к экономии 400-500 мс.
Вот ответ 301 от Intel
441 мс
DNS Lookup: 103 ms
Initial Connection: 219 ms
Time to First Byte: 222 ms
Content Download: ms
Bytes In (downloaded): 0.1 KB