2010-11-04 11 views
6

Mam system, w którym maksymalny rozmiar pamięci podręcznej jest ustawiony na 0 i jest problem, gdy dokonałem pewnych zmian w moim stylu. CSS nie powiodło się zmiany nie dotrą do klienta. Przeglądarka użyje starej buforowanej wersji css. Mam proste pytanie: Czy nazwa pliku css jako style.css? 123 będzie buforowana jako nowa?Buforowanie pliku css

+0

czy używasz serwera IIS lub Apache? –

Odpowiedz

15

Tak, dodanie unikalnego ciągu zapytania do identyfikatora URI zasobu zmusi klienta do pobrania "świeżej" wersji (ponieważ klient nie wie, że jest to po prostu aktualizacja wcześniej buforowanego zasobu). Jest to nazywane fingerprinting i zwykle używasz znacznika czasu lub zwiększającego się numeru wersji pliku CSS.

Google Web Fundamentals ma świetny artykuł na temat HTTP cache optimization. Szczególnie sekcja zatytułowana „Unieważnienie i aktualizowania pamięci podręcznej odpowiedzi:”

Jak uzyskać najlepsze z obu światów: buforowanie po stronie klienta i szybkie aktualizacje? Zmieniasz adres URL zasobu i zmuszasz użytkownika do pobrania nowej odpowiedzi po każdej zmianie treści. Zazwyczaj robi się to przez osadzenie odcisku palca pliku lub numeru wersji w nazwie pliku - na przykład stylu. x234dff .css.

Należy pamiętać, że odcisk palca nie musi być numerem kolejnym. Każda wartość - hash, wersja itd. - będzie obowiązywała tak długo, jak ryzyko kolizji jest ograniczone.


1) To, co się stało tutaj na SO, na przykład http://sstatic.net/js/global-login.js?v=12

+0

Wygląda na to, że użycie parametrów ciągu zapytania jest złe. Zobacz http://stackoverflow.com/a/13377291/637609 –

+0

czy możesz zaktualizować link do optymalizacji pamięci podręcznej? – shankbond

+0

@shankbond Gotowe. – jensgram

0

tak, dodanie parametru zapytania w każdym pliku style.css spowoduje ponowne jego zapisanie w pamięci podręcznej.
ponieważ przeglądarka buforuje każdy statyczny komponent za pomocą jego adresu URL, więc gdy adres URL zostanie zmieniony, nowy plik zostanie zbuforowany.

+0

Wygląda na to, że użycie parametrów ciągu zapytania jest złe. Zobacz http://stackoverflow.com/a/13377291/637609 –

0

Można oszukać przeglądarkę do myślenia, że ​​to nowy arkusz stylów, co sekundę przez timestamping CSS:

<link rel="stylesheet" type="text/css" href="style.css?<?php echo date('l jS \of F Y h:i:s A'); ?>" /> 

które dadzą ci ten:

<link rel="stylesheet" type="text/css" href="style.css?Thursday 24th of April 2008 04:45:21 PM" /> 

albumu: Can We Prevent CSS Caching?

+0

Wygląda na to, że użycie parametrów ciągu zapytania jest złe. Zobacz http: // stackoverflow.com/a/13377291/637609 –

1

Możesz dodać unikatowy ciąg zapytania, chociaż będzie to wykorzystywać przepustowość.

Można zmienić nazwę pliku CSS za każdym razem, gdy coś zmienić, a mianowicie:

głównego v1.css głównego v2.css głównego v3.css

a następnie ponownie go odniesienia na twoich stronach. To oszczędza przepustowość i zmusza przeglądarki do ponownego ładowania.

+0

W jaki sposób 'main.css? V1' będzie używać większej przepustowości niż' main-v1.css'? (Chyba źle odczytałem twoją odpowiedź.) – jensgram

+0

main.css? V1 jest w rzeczywistości taki sam, miałem na myśli oznaczanie dat, to ładowałoby go za każdym razem, gdy potrzebujesz go załadować tylko wtedy, gdy nastąpiła zmiana. Nazewnictwo pliku css w różny sposób przy każdej zmianie lub dodanie zapytania o numer wersji to 2 najlepsze sposoby. –

+0

Wygląda na to, że użycie parametrów ciągu zapytania jest złe. Zobacz http://stackoverflow.com/a/13377291/637609 –