Zgodnie z dobrze sprawdzonymi najlepszymi praktykami firmy Yahoo dotyczącymi przyspieszenia witryny , udostępniamy statyczne treści z CDN przy użyciu nagłówków wygasających pamięci podręcznej w przyszłości. Oczywiście musimy od czasu do czasu aktualizować te pliki „statyczne”, dlatego obecnie dodajemy wersję poprawkową jako część nazwy pliku (na podstawie sumy zawartości pliku SHA1). A zatem:
styles.min.css
Staje się:
styles.min.abcd1234.css
Jednak zarządzanie wersjonowanymi plikami może być uciążliwe i zastanawiałem się, czy notacja argumentu GET może być czystsza i lepsza:
styles.min.css?v=abcd1234
Z którego korzystasz i dlaczego? Czy należy wziąć pod uwagę kwestie związane z przeglądarką lub proxy / pamięcią podręczną?
static-content
cache-control
David Eyk
źródło
źródło
Odpowiedzi:
Według Google Make the Web Faster strony z parametrami zapytania nie są buforowane przez wiele serwerów proxy HTTP.
Takie
styles.min.abcd1234.css
jest preferowane rozwiązanie. Możesz użyć odpowiedniego mechanizmu przepisywania adresów URL, aby zmienićstyles.min.abcd1234.css
na łatwiejsze w implementacjistyles.min.css?v=abcd1234
przejrzyste.Jeśli obsługujesz tylko HTTPS, ta rada nie ma zastosowania, ponieważ serwery proxy zwykle nie mogą buforować stron obsługiwanych przez SSL.
źródło
Używając wersji w stylu GET, z pustej pamięci podręcznej wiele adresów URL - np.
style.css?v=123
Istyle.css?v=456
- zwróci tę samą treść. Jednak nie widzę, że byłoby to problematyczne, zwłaszcza, że prowadziłbyś do jednego linku naraz.Myślę, że łatwiej będzie utrzymać styl GET. Nie potrzebujesz osobnych plików: wystarczy zmienić adres URL, a przeglądarki ponownie pobiorą CSS.
AKTUALIZACJA: po dalszych badaniach wydaje się, że użycie ciągu zapytania może zatrzymać przeglądarki buforujące pliki. Jeśli jednak zwracasz odpowiednie nagłówki, takie jak
Expires
ten, nie stanowi to problemu.AKTUALIZACJA 2: zaakceptowana odpowiedź wskazuje, że niektóre serwery proxy nie buforują plików ciągiem zapytania. Jest to jednak oparte na starych informacjach; szczególny problem, o którym wspominali w Squid, został naprawiony 7 lat temu. Imponujące sieci napisały o tym dobrze.
źródło
Oba będą działać równie dobrze, ponieważ ciąg zapytania jest uważany za część adresu URL i zmieniając go, w rzeczywistości zmieniasz nazwę zasobu, powodując w ten sposób pobranie nowej kopii pliku przez przeglądarkę.
Mówię, że używaj dowolnej metody, którą łatwiej utrzymać.
źródło
to nie jest odpowiedź na powyższe pytanie , chcę lepszego rozwiązania, więc pytam o to tutaj
Obie metody wymagałyby modyfikacji plików, do których odnoszą się pliki css i js. W efekcie wymagałoby to ponownego uruchomienia serwera aplikacji po wprowadzeniu zmian.
Czy istnieje lepszy sposób, w którym można obsłużyć wersjonowanie plików statycznych bez konieczności ponownego uruchamiania serwera aplikacji?
w rozwiązaniu wykluczone jest:
rozwiązanie również nie powinno wpływać na ustawienie kontroli pamięci podręcznej lub wygasa.
dzięki
źródło