2012-11-16 10 views
5

Jak rozumiem, w ten sposób działa buforowanie przeglądarki. Zakładając, że przyszły nagłówek został ustawiony na rok, a foo.js jest buforowany. Oto kilka scenariuszy:Czy możesz wymusić na przeglądarce, aby zawsze pobierać buforowane pliki i nie robić podróży w obie strony dla 304?

  1. Pierwsza wizyta na stronie, serwer zwraca 200, a foo.js jest buforowany przez rok.

  2. Następna wizyta, przeglądarka sprawdza pamięć podręczną, ale musi sprawdzić serwer, czy plik foo.js został zmodyfikowany. Jeśli nie, serwer zwraca wartość 304 - Nie zmodyfikowano.

  3. Użytkownik jest już na stronie (i foo.js jest w pamięci podręcznej) klika łącze, aby przejść do innej strony, przeglądarka przegląda buforowaną wersję pliku foo.js i wyświetla ją bez wykonywania objazdu na serwer i zwraca wartość 200 (buforowany).

  4. Użytkownik jest już na stronie (a foo.js jest w pamięci podręcznej) i z jakiegoś powodu uderza F5/Załaduj ponownie, przeglądarka sprawdza pamięć podręczną, ale musi odbyć podróż do serwera i sprawdzić, czy plik foo.js ma zostało zmodyfikowane. Jeśli nie, serwer zwraca 304.

Jak widać, gdy strona jest odświeżana, to zawsze trzeba zrobić wycieczkę do serwera, aby sprawdzić, czy plik został zmodyfikowany, czy nie. Wiem, że to niewiele, a serwer zwróci tylko informacje w nagłówku, ale czas podróży w obie strony w niektórych przypadkach jest niezwykle ważny.

Pytanie brzmi, czy jest sposób, w jaki mogę tego uniknąć, ponieważ już ustalam datę wygaśnięcia plików. Po prostu chcę, żeby zawsze pobierał je z pamięci podręcznej, aż wygasła ważność lub zastąpił plik innym (wersją).

+0

2 wydaje się niewłaściwe, chyba że w nagłówkach jest napisane, że musisz zawsze weryfikować ponownie –

Odpowiedz

0

Z tego co rozumiem, naciśnięcie klawisza F5/Ctrl-R jest działaniem specyficznym dla przeglądarki, pozostawiając kontrolę przeglądarce.

Co się stanie, jeśli użytkownik wyczyści pamięć podręczną przed kliknięciem innej akcji? Tak więc, nawet jeśli istniała specyfikacja HTTP do wymuszonego używania pamięci podręcznej w F5, nie ma gwarancji, że będziesz w stanie osiągnąć swoje potrzeby.

Po prostu skonfiguruj i skopiuj do pamięci podręcznej, gdzie tylko jest to możliwe, i pozostaw resztę użytkownikowi.

0

Wygląda na to, że po przejściu do strony (która wprowadza adres w pasku adresu URL lub kliknięciu łącza), zasoby są pobierane z pamięci podręcznej bez żądania HEAD do serwera. Ale kiedy odświeżysz stronę, wykona żądanie HEAD, a następnie RTT.

To wygląda bardziej wyraźnie na karcie Sieć narzędzi programistycznych IE. Jeśli widzisz kolumnę inicjatora, oznacza ona navigate dla pierwszego przypadku i refresh dla CTRL+R lub F5.

można zastąpić zachowanie F5 i CTRL+R dodając detektor zdarzeń na nich i robi window.location = window.location i zapobieganie domyślne zachowanie przez event.peventDefault lub coś podobnego. Spowoduje to nawigację po stronie zamiast odświeżania.

Ponadto, nie przetestowałem przypadku, gdy zasób pamięci podręcznej został faktycznie zmieniony na serwerze. Jeśli okaże się, że jest to problem, możesz go rozwiązać poprzez numerowanie wersji zasobów i generowanie kodu HTML z adresami URL wskazującymi najnowszą wersję zasobu (rodzaj problemu z manifestem w pamięci podręcznej z aplikacjami offline HTML5).

EDYCJA: To jednak nie rozwiąże problemu, jeśli użytkownik kliknie przycisk odświeżania przeglądarki; onbeforeunload wydarzenie może pomóc w tym przypadku.

Powiązane problemy