Когда использовать, а не использовать ETags

9

Я только что заглянул на наш сайт на WebPageTest.org, и одна из их рекомендаций по ускорению работы сайта:

Заголовки ETag, как правило, не должны использоваться, если у вас нет явной причины их использовать

Мне было интересно, что это значит. Означает ли это, что статический контент, который, как вы знаете, не будет изменяться, не должен иметь их, или это означает, что контент, который, как вы знаете, будет регулярно меняться, не должен иметь их, или же это означает, что вы не должны использовать его вообще, если у вас нет конкретная необходимость.

Если это последнее, когда самое время их использовать? Спасибо за любую помощь.

Джанго Рейнхардт
источник

Ответы:

8

ETags являются альтернативой (но могут использоваться в сочетании с) «Last-Modified-Time» для определения проверки кэша.

Клиент может отправить предварительное условие, такое как if-match или if-none-match, на основе ETag. Это не только для запросов GET (что и делает webpagetest.org), вы можете использовать «оппортунистическое обновление», так что запрос PUT имеет предварительное условие и не будет выполнять операцию обновления, если ресурс был обновлен, так как ETag был последний приобрел.

Проще говоря: вы нажимаете кнопку "Изменить" на странице в вашей CMS, ваш друг нажимает кнопку "Редактировать" на странице в вашей CMS, ваш друг выполняет их редактирование и сохраняет нажатия, и, наконец, вы нажимаете "Сохранить" - без HTTP-заголовка ETag или Content-MD5, который вам понадобится чтобы заново изобрести колесо, чтобы предотвратить возникновение проблем (таких как стирание изменений друзей), решение уже является частью протокола HTTP, и поэтому имеет смысл просто использовать его.

Как правило, я согласен с AOL (который запускает webpagetest.org) по их совету «один размер подходит всем» - лучше не засорять заголовки HTTP загадочными строками (ETag, как правило, не очень красивы или удобочитаемы для человека), когда секунда разницы ( который может обнаружить Last-Modified-Time) для работы в руке.

Если страница обновляется несколько раз в секунду, и вам абсолютно необходима последняя самая точная версия для отображения, вы можете поэкспериментировать с решениями, отличными от HTTP GET, или просто использовать ETag.

Будьте осторожны, чтобы ваши ETag не включали информацию о файловой системе, об изменении конфигурации сервера и т. Д. (Например, inode-ы, которые по умолчанию установлены в Apache), иначе у вас будут проблемы, когда есть два сервера (ETag каждого из них не будут совпадать).

Metalshark
источник
Это нормально. Есть один пример, в котором я не уверен: если у вас есть несколько версий контента на одном URI (например, версии для мобильных устройств или Internet Explorer), ETags можно использовать для поиска в КАЖДОЙ версии для поиска соответствия (поэтому он называется if- none-match not if-not-match) - в зависимости от того, кого вы спрашиваете, существуют разные ответы (например, не имеют одного постоянного URI для нескольких представлений и т. д.).
Metalshark
7

Перефразируя превосходную оценку Coding Horror плагина YSlow Firebug (который, по-видимому, использует WebPageTest.org в качестве основы для своей оценки):

«Yahoo является одним из самых загруженных сайтов в мире - его проблемы, вероятно, не ваши проблемы».

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

danlefree
источник
Я ценю комментарий, но вы ошибаетесь. Стив Саундерс объясняет здесь: stevesouders.com/blog/2010/09/07/webpagetest-org-and-page-speed (Он большой сторонник полезных улучшений - то есть не только улучшений, которые будут работать для Google.) Наш сайт определенно достаточно большой, чтобы почувствовать увеличение скорости от таких улучшений (и уже имеет).
Джанго Рейнхардт
2
Расширение yslow firebug теперь включает в себя тест для небольших сайтов, который является гораздо более реалистичным для большинства сайтов.
Джон Конде
1
@Django Reinhardt - я перефразировал свой ответ, это правда, что многие из предложений действительны для любого сайта, но ETags в частности спорны, потому что, в случае Y!, Функция конфликтует с балансировкой нагрузки
danlefree
Ссылка, которую вы предоставили, содержала ссылку на описание ETags в Yahoo ( developer.yahoo.com/performance/rules.html#etags ), которое хорошо отвечает на мои вопросы. (Да, для нас было бы лучше не обслуживать ETags.) Спасибо.
Джанго Рейнхардт
1
@Django: Если у вас несколько серверов, то ETag может быть проблемой. Однако, если один и тот же файл всегда возвращает один и тот же ETag, это прекрасно. См. Также: webmasters.stackexchange.com/questions/1459/…
DisgruntledGoat