использовать кеширование в браузере - истекает или max-age, последнее изменение или etag - PullRequest
52 голосов
/ 02 мая 2011

Мне трудно найти четкое практическое объяснение того, как правильно использовать кэширование в браузере для увеличения скорости страницы.

В соответствии с этим сайтом :

Важно указать одно из значений: Expires или Cache-Control max-age, а также одно из Last-Modified или ETag., для всех кешируемых ресурсов.Излишне указывать как Expires, так и Cache-Control: max-age или указывать как Last-Modified и ETag.

Это правильно?Если так, я должен использовать Expires или max-age?Я думаю, что у меня есть общее представление о том, что это такое, но я не знаю, какой из них лучше всего использовать.

Если я должен также сделать Last-Modified или ETag, какой из них?Я думаю, что получаю Last-Modified, но все еще очень размыт по поводу этой ETag концепции.

Кроме того, для каких файлов я должен разрешить кэширование в браузере?

1 Ответ

69 голосов
/ 02 июня 2011

Это правильно?

Да, Expires и max-age делают одно и то же, но двумя разными способами.То же самое с Last-Modified и Etag

Если да, то должен ли я делать истечение или максимальный возраст?

Истечение срока действия зависит от точности часов пользователя, так что это в основномплохой выбор (так как большинство браузеров поддерживают HTTP / 1.1).Используйте max-age, чтобы сообщить браузеру, что файл хорош в течение такого количества секунд.Например, однодневный кэш будет иметь следующий вид:

Cache-Control: max-age = 86400

Обратите внимание, что при наличии как Cache-Control, так и Expires, Cache-Control имеет приоритет, читать

Если я должен также сделать Last-Modified или ETag, какой из них?Я думаю, что я получил Last-Modified

Вы правы, Last-Modified должно быть лучше.Хотя это время, оно отправлено сервером.Следовательно, нет проблем с часами пользователя.Это причина, почему Last-Modified лучше, чем Expires.Браузер отправляет Last-Modified сервер, отправленный в последний раз, когда он запрашивал файл, и, если он совпадает, сервер отвечает пустым ответом «304 Not Modified»

Кроме того, вы должны отметить, что ETag можетбыть полезным, потому что Last-Modified имеет временное окно в одну секунду.Таким образом, вы не можете различить два разных источника с одинаковым значением Last-Modified.[2]

Etag требуется больше вычислений, чем Last-Modified, поскольку это сигнатура текущего состояния файла (аналогично сумме md5 или CRC32).

Кроме того, в каких файлах я должен включить кэширование в браузере?

Все файлы могут использовать кэширование.У вас есть два разных подхода:

  • с max-age: полезно для файлов, которые никогда не меняются (изображения, CSS, javascript).Пока значение максимального возраста, браузер не будет отправлять запросы на сервер.Таким образом, вы увидите, что страница загружается очень быстро при второй загрузке.Если вам необходимо обновить файлы, просто добавьте знак вопроса и дату изменения (например, /image.png?20110602 или для лучшего кэширования прокси-серверов, например, /20110602/image.png или /image.20110602.png).,Таким образом, вы можете сделать так, чтобы срок действия файлов истек, если это срочно (помните, что браузер почти никогда не обращается к серверу, если у него есть файл максимального возраста).Основное использование - ускорить процесс и ограничить количество запросов, отправляемых на сервер.
  • с Last-Modified: можно установить для всех файлов (включая файлы с максимальным возрастом).Даже если у вас есть динамические страницы, вы не можете некоторое время изменять содержимое файла (даже если это 10 минут), так что это может быть полезно.Основное использование здесь - это сказать браузеру «продолжайте спрашивать меня об этом файле, если он новый, я вышлю вам новый».Итак, при каждой загрузке страницы отправляется запрос, но ответ пуст, если файл уже исправен (304 Не изменен), поэтому вы экономите на пропускной способности.

Чем больше вы кешируете, тем быстрееваши страницы будут отображаться.Но это сложная задача для очистки кешей, поэтому используйте с осторожностью.

Хорошее место, чтобы узнать все это с множеством объяснений: http://www.mnot.net/cache_docs/

[2]: rfc7232 Etag https://tools.ietf.org/html/rfc7232#section-2.3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...