Jakie są twarde i szybkie zasady kontroli pamięci podręcznej?

15

Spowiedź : witryny, które utrzymuję, mają różne reguły Kontroli pamięci podręcznej, oparte głównie na domyślnej konfiguracji serwera, a następnie na zaleceniach wtyczek Firefox Speed ​​Page i Y-Slow Firefox oraz widoku Zasoby sieciowe w Speed ​​Tracer Google . Kontrola pamięci podręcznej jest ustawiona na prywatną / publiczną w zależności od tego, co mówią, nagłówki ETag / Last-Modified są majstrowane tylko wtedy, gdy Y-Slow sugeruje, że coś jest nie tak, a kodowanie Vary-Accept wydaje się konieczne przy ręcznym gzipowaniu plików dla Amazon CloudFront.

Podczas czytania materiału na temat różnych opcji i wykonywanych przez nich działań wydaje się, że istnieją sprzeczne informacje, zasady dotyczące zepsutych serwerów proxy i konfiguracji kultu ładunku . Żadna z oficjalnych informacji dostarczonych przez wspomniane powyżej narzędzia analityczne jest dość niedostępna, ponieważ dotyczy każdego tematu indywidualnie, a nie zunifikowanej strategii (więc nie ma odsyłaczy do technik).

Na przykład wydaje się, że nie ma sensu, aby narzędzia analizy prędkości oceniały witrynę z ETagiem tak samo jak witryna bez nich, jeśli mają one pomóc w buforowaniu.

Jakie są twarde i szybkie zasady agnostycznej strategii kontroli pamięci podręcznej dla platformy?

EDYTOWAĆ:

Link przez art Jeff Atwood za wyjaśnia buforowania w doskonałej głębi.

Dla przypomnienia, oto twarde i szybkie zasady:

Jeśli plik jest skompresowany przy użyciu GZIP itp. - użyj „cache-control: private”, ponieważ serwer proxy może zwrócić skompresowaną wersję klientowi, który go nie obsługuje (pamięć podręczna przeglądarki będzie jednak przechowywać pliki oznaczone w ten sposób). Pamiętaj także, aby dołączyć „Vary: Accept-Encoding”, aby powiedzieć, że jest on kompresowalny.

Używaj Last-Modified w połączeniu z ETag - użycie pasów i nawiasów zapewnia oba walidatory, podczas gdy ETag jest oparty na zawartości pliku zamiast samego czasu modyfikacji, przy użyciu obu obejmuje wszystkie bazy. UWAGA: Z jakiegoś powodu PageTest firmy AOL stosuje podejście blanszowania kart ETAG. Jeśli używasz Apache na więcej niż jednym serwerze do obsługi tej samej zawartości, usuń niejawnie zadeklarowany i-węzeł z ETagów, wykluczając go z dyrektywy FileETag (tj. „FileETag MTime Size”), chyba że naprawdę używasz tego samego systemu plików na żywo.

Używaj „kontroli pamięci podręcznej: publiczna”, gdziekolwiek możesz - oznacza to, że serwery proxy (i pamięć podręczna przeglądarki) zwrócą twoją zawartość, nawet jeśli reszta strony wymaga uwierzytelnienia HTTP itp.

Metalshark
źródło

Odpowiedzi:

8

Po pierwsze, nie pozbywaj się ETag, jak mówi Yahoo, chyba że używasz farmy serwerów / klastra serwerów. Tak długo, jak ten sam plik zawsze zwraca ten sam ETag, gdy się nie zmienił, jest to bardzo przydatna dyrektywa.

Podobnie jak w przypadku innych nagłówków, najlepsze praktyki Yahoo sugerują ustawienie dalekiej przyszłości Expiresnagłówka dla plików statycznych, używanego Cache-Controldo zawartości dynamicznej. Jednak Cache-controldoskonale nadaje się do treści statycznych (właściwie nie ma między nimi żadnej różnicy).

Po zmianie buforowanych plików statycznych należy zmienić nazwę pliku lub dodać na końcu unikalny parametr, np example.com/styles.css?v=2. Preferowana jest jednak zmiana rzeczywistej nazwy pliku, jak zauważono w komentarzach poniżej.

Nawiasem mówiąc, możesz edytować reguły YSlow według własnych upodobań, aby usunąć regułę Etag i dodać własną domenę jako CDN. Ten artykuł to także dobra lektura: Problemy Yahoo nie są Twoimi problemami

DisgruntledGoat
źródło
ETag jeden miał sens w Apache, wykonując „FileETag MTime Size” zamiast domyślnego, który zawiera i-węzeł (na FS tak niewiarygodny) na Y-Slow. Jednak zalecenia dotyczące najlepszych praktyk Yahoo są nieco mylące w porównaniu do Page Speed. Na przykład mówi, aby używać Cache-Control tylko na stronach dynamicznych (jak również sugerujesz), ale Google sugeruje użycie Cache-Control: public na statycznym CSS i Cache-Control: private na ręcznie GZippowanych plikach Amazon Cloudfront.
Metalshark
Trudno wiedzieć, co zrobić z tymi poradami dla pełnomocników. Google mówi po prostu „Niektóre publiczne serwery proxy mają błędy ...”, ale nie mówi, jak często to występuje. Zaleca się ustawienie nagłówka Vary: Accept-Encoding, patrz dół code.google.com/speed/page-speed/docs/caching.html
Niezadowolony Goo
Dodanie parametru zapytania wyłącza buforowanie tego pliku całkowicie w niektórych przeglądarkach. Dlatego możesz zamiast tego zastosować podejście „zmień nazwę pliku”, na przykładexample.com/style_v2.css
Evgeny
@Evgeny: Które przeglądarki? Słyszałem to wcześniej, ale nigdy nie widziałem przeglądarki, która tak naprawdę nie buforuje pliku (szczególnie jeśli masz odpowiednie nagłówki).
DisgruntledGoat
@DisgruntledGoat w rzeczywistości, po pewnym kopaniu wydaje się, że jest to relikt z ery http / 1.0, w której było częścią specyfikacji, że tak naprawdę klient użytkownika nie może buforować zasobów zawierających ciągi zapytania. Z drugiej strony code.google.com/speed/page-speed/docs/caching.html stwierdza, że ​​to serwery proxy (kałamarnica <3.0) nie będą buforować zasobów, a zatem odradza się stosowanie ciągów zapytań do pomijania pamięci podręcznej.
Evgeny
0

Zmień nagłówki żądań zasobów, aby używać buforowania. Dla większości osób sposobem buforowania ebable jest dodanie kodu do pliku o nazwie .htaccess na twoim hoście / serwerze.

Oznacza to przejście do menedżera plików (lub gdziekolwiek chcesz dodać lub załadować pliki) na swoim serwerze internetowym.

Plik .htaccess kontroluje wiele ważnych rzeczy dla Twojej witryny. Jeśli nie znasz pliku .htaccess, przeczytaj moją pracę z artykułem .htaccess, aby dowiedzieć się, jak go zmienić.

Poniższy kod informuje przeglądarki, co należy buforować i jak długo „zapamiętywać”. Należy go dodać na początku pliku .htaccess.

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

Zapisz plik .htaccess, a następnie odśwież stronę.

Źródło:
https://varvy.com/pagespeed/leverage-browser-caching.html

Nomib Nomib
źródło
Niemal każdy przykład ExpiresByTypedyrektyw, które widzę, zawiera typ MIME text/x-javascript- czy Twój serwer naprawdę odpowiada na ten typ zawartości ?! (Przykład niewidocznego kopiowania / wklejania IMO.)
MrWhite 15.09.15