Kiedy używać, a nie używać znaczników ETag

9

Właśnie patrzyłem na naszą stronę na WebPageTest.org, a jednym z ich zaleceń dotyczących przyspieszenia witryny jest:

Nagłówków ETag zasadniczo nie należy używać, chyba że masz wyraźny powód, aby ich potrzebować

Zastanawiałem się, co to znaczy. Czy to oznacza, że ​​treści statyczne, o których wiesz, że się nie zmienią, nie powinny ich mieć, czy to oznacza, że ​​treści, o których wiesz, że będą się regularnie zmieniać, nie powinny ich mieć, czy też oznacza to, że nie powinieneś ich ogólnie używać, chyba że masz konkretna potrzeba.

Jeśli to ta ostatnia, kiedy jest odpowiedni moment, aby z nich skorzystać? Dziękuję za wszelką pomoc.

Django Reinhardt
źródło

Odpowiedzi:

8

Znaczniki ET są alternatywą (ale mogą być używane w połączeniu z) „Last-Modified-Time” w celu ustalenia sprawdzania poprawności pamięci podręcznej.

Klient może wysłać warunek wstępny, taki jak if-mecze lub if-none-mecze na podstawie ETag. Nie dotyczy to tylko GET (czyli tego, co robi webpagetest.org). Możesz użyć „aktualizacji oportunistycznej”, aby żądanie PUT miało warunek wstępny i nie wykonało operacji aktualizacji, jeśli zasób został zaktualizowany od czasu ETag ostatnio nabyte.

Mówiąc prościej: naciskasz edytuj na stronie w CMS, twój przyjaciel naciska edycję na stronie w CMS, przyjaciel wykonuje ich edycję i zapisuje, a na koniec zapisujesz - bez nagłówka HTTP ETag lub Content-MD5, którego potrzebujesz aby wymyślić koło na nowo, aby zapobiec występowaniu problemów (takich jak wycieranie zmian przez znajomych), rozwiązanie jest już częścią protokołu HTTP i dlatego warto po prostu z niego korzystać.

Zasadniczo zgadzam się z AOL (który prowadzi webpagetest.org) w sprawie ich „jednego rozmiaru dla wszystkich” - lepiej nie zapychać nagłówków HTTP za pomocą tajemniczych ciągów (znaczniki ET na ogół nie są ładne ani czytelne dla człowieka), gdy sekunda różnicy ( który może wykryć czas ostatniej modyfikacji) zrobi dla danego zadania.

Jeśli strona jest aktualizowana kilka razy na sekundę i absolutnie potrzebujesz najnowszej, najdokładniejszej wersji do wyświetlenia, możesz poeksperymentować z rozwiązaniami innymi niż HTTP GETs lub po prostu użyć ETagów.

Uważaj, aby twoje znaczniki ETag nie obejmowały systemu plików, zmiany konfiguracji serwera itp. (Takich jak i-węzły, które są domyślne w Apache), w przeciwnym razie wystąpią problemy, gdy będą dwa serwery (znaczniki ETag z każdego z nich nie będą pasować).

Metalshark
źródło
W porządku. Jest jeden przykład, którego nie jestem pewien: jeśli masz wiele wersji treści na jednym identyfikatorze URI (takich jak wersja mobilna lub Internet Explorer), ETags mogą być użyte do przeszukania KAŻDEJ wersji dopasowania (stąd nazywa się if- none-pasuje not if-not-match) - w zależności od tego, kogo pytasz, istnieją różne odpowiedzi (takie jak brak jednego stałego identyfikatora URI dla kilku reprezentacji itp.).
Metalshark,
7

Aby sparafrazować doskonałą ocenę Coding Horror dotyczącą wtyczki YSlow Firebug (która, jak się wydaje, WebPageTest.org wykorzystuje jako podstawę do ich oceny):

„Yahoo to jedna z najbardziej ruchliwych stron internetowych na świecie - jej problemy prawdopodobnie nie są twoimi problemami”.

Jeśli nie masz do czynienia z milionami unikatów w sieci z równoważeniem obciążenia na co dzień, istnieje duża szansa, że ​​przedstawione sugestie nie są właściwym wyborem podczas optymalizacji witryny.

danlefree
źródło
Doceniam ten komentarz, ale się mylisz. Steve Sounders wyjaśnia tutaj: stevesouders.com/blog/2010/09/07/webpagetest-org-and-page-speed (jest wielkim zwolennikiem przydatnych ulepszeń - tj. Nie tylko ulepszeń, które będą działać dla Google.) zdecydowanie wystarczająco duży, aby poczuć wzrost prędkości od takich ulepszeń (i już ma).
Django Reinhardt
2
Rozszerzenie firebug yslow zawiera teraz test dla mniejszych witryn, który jest znacznie bardziej realistyczny dla większości stron.
John Conde
1
@Django Reinhardt - Przeredagowałem moją odpowiedź, to prawda, że wiele sugestii jest poprawnych dla dowolnej witryny, ale w szczególności ETag jest kontrowersyjny, ponieważ w przypadku Y! Funkcja jest sprzeczna z równoważeniem obciążenia
danlefree
Podany przez ciebie link zawierał link do opisu ETagów Yahoo ( developer.yahoo.com/performance/rules.html#etags ), który ładnie odpowiada na moje pytania. (Tak, prawdopodobnie lepiej byśmy nie podawali znaczników ET). Dzięki.
Django Reinhardt
1
@Django: Jeśli masz wiele serwerów, znaczniki ETag mogą stanowić problem. Jednak dopóki ten sam plik zawsze zwraca ten sam znacznik ETag, jest w porządku. Zobacz także: webmasters.stackexchange.com/questions/1459/…
DisgruntledGoat