Jak wyczyścić pamięć podręczną przeglądarki za pomocą JavaScript?
Wdrożyliśmy najnowszy kod JavaScript, ale nie możemy pobrać najnowszego kodu JavaScript.
Uwaga redakcyjna: to pytanie jest częściowo powtórzone w poniższych miejscach, a odpowiedź na pierwsze z poniższych pytań jest prawdopodobnie najlepsza. Ta zaakceptowana odpowiedź nie jest już idealnym rozwiązaniem.
Jak zmusić przeglądarkę do ponownego załadowania buforowanych plików CSS / JS?
Jak zmusić klientów do odświeżenia plików JavaScript?
Dynamicznie przeładuj lokalne dane źródłowe / json JavaScript
javascript
caching
Dylan Brams
źródło
źródło
?version=xxx
do połączonych plików JS w etapie kompilacji. Każda nowa kompilacja zażąda nowej wersji pliku JS.Odpowiedzi:
Możesz wywołać window.location.reload (true), aby ponownie załadować bieżącą stronę. Zignoruje wszelkie elementy z pamięci podręcznej i pobierze nowe kopie strony, css, obrazów, JavaScript itp. Z serwera. Nie powoduje to wyczyszczenia całej pamięci podręcznej, ale powoduje wyczyszczenie pamięci podręcznej strony, na której się znajdujesz.
Jednak najlepszą strategią jest utworzenie wersji ścieżki lub nazwy pliku, jak wspomniano w różnych innych odpowiedziach. Ponadto, zobacz Revving Filenames: nie używaj querystring z powodów, których nie należy używać
?v=n
jako schematu wersji.źródło
Nie możesz wyczyścić pamięci podręcznej za pomocą javascript. Typowym sposobem jest dołączenie numeru wersji lub ostatniej aktualizacji znacznika czasu do pliku, na przykład:
lub
myscript.js?updated=1234567890
źródło
Spróbuj zmienić src pliku JavaScript? Od tego:
Do tego:
Ta metoda powinna zmusić przeglądarkę do załadowania nowej kopii pliku JS.
źródło
Oprócz buforowania co godzinę lub co tydzień możesz buforować dane zgodnie z danymi pliku.
Przykład (w PHP):
lub nawet użyj czasu modyfikacji pliku:
źródło
Możesz także wymusić ponowne ładowanie kodu co godzinę, na przykład w PHP:
lub
źródło
umieść to na końcu swojego szablonu:
źródło
spróbuj tego użyć
Do tego:
źródło
Oto fragment tego, czego używam w moim najnowszym projekcie.
Ze sterownika:
Z widoku:
Nasz proces publikowania generuje plik z numerem wersji bieżącej kompilacji. Działa to poprzez kodowanie adresu URL tego pliku i używanie go jako pomijania pamięci podręcznej. W przypadku awarii, jeśli ten plik nie istnieje, używany jest rok i numer tygodnia, dzięki czemu buforowanie nadal działa i będzie odświeżane co najmniej raz w tygodniu.
Ponadto zapewnia to pomijanie pamięci podręcznej przy każdym załadowaniu strony w środowisku programistycznym, dzięki czemu programiści nie muszą martwić się o czyszczenie pamięci podręcznej z jakichkolwiek zasobów (javascript, css, wywołania ajax itp.).
źródło
lub możesz po prostu odczytać plik js przez serwer za pomocą file_get_contets, a następnie wstawić echo w nagłówku zawartość js
źródło
Może „wyczyszczenie pamięci podręcznej” nie jest tak łatwe, jak powinno. Zamiast czyścić pamięć podręczną w moich przeglądarkach, zdałem sobie sprawę, że „dotknięcie” pliku w rzeczywistości zmieni datę pliku źródłowego zapisanego w pamięci podręcznej na serwerze (Testowane na Edge, Chrome i Firefox), a większość przeglądarek automatycznie pobierze najnowszą, świeżą kopię pliku co jest na twoim serwerze (kod, grafika, wszelkie multimedia). Proponuję po prostu skopiować najbardziej aktualne skrypty na serwerze i „zrobić dotyk rzecz” rozwiązanie przed swoimi przebiegów programu, więc będzie to zmienić datę wszystkich plików problemowych do najbardziej aktualnej daty i czasu, a następnie pobiera nową kopię do Twojej przeglądarki:
... reszta twojego programu ...
Zajęło mi trochę czasu, aby rozwiązać ten problem (ponieważ wiele przeglądarek działa inaczej na różne polecenia, ale wszystkie sprawdzają czas plików i porównują z pobraną kopią w przeglądarce, jeśli inna data i godzina, odświeży się), jeśli nie może pójść w rzekomy sposób, zawsze istnieje inne użyteczne i lepsze rozwiązanie. Pozdrawiam i szczęśliwego kempingu.
źródło
Miałem kłopoty z kodem sugerowanym przez yboussarda. Wewnętrzna pętla j nie działała. Oto zmodyfikowany kod, którego używam z powodzeniem.
źródło
Jeśli używasz php, możesz zrobić:
źródło
Cache.delete () może być używany dla nowych przeglądarek Chrome, Firefox i Opera.
źródło
You don't have to use it in conjunction with service workers, even though it is defined in the service worker spec.
Prosimy nie podawać błędnych informacji. Cache API to inny typ pamięci podręcznej niż pamięć podręczna http
Pamięć podręczna HTTP jest uruchamiana, gdy serwer wysyła prawidłowe nagłówki , nie możesz uzyskać dostępu za pomocą javasvipt.
Cache api z drugiej strony jest uruchamiany, kiedy chcesz, jest to przydatne podczas pracy z pracownikiem usług, dzięki czemu można przecinać żądanie i odpowiadać na nie z tego typu pamięci podręcznej patrz: ilustracja 1 ilustracja 2 kurs
Możesz użyć tych technik, aby zawsze mieć świeżą zawartość dla swoich użytkowników:
Trzeci poleciłbym zobaczyć
źródło
Możesz również wyłączyć buforowanie przeglądarki za pomocą metatagów HTML, po prostu umieść tagi HTML w sekcji nagłówka, aby uniknąć buforowania strony internetowej podczas kodowania / testowania, a kiedy skończysz, możesz usunąć metatagi.
(w sekcji głównej)
Odśwież swoją stronę po wklejeniu tego w głowie i odśwież również nowy kod javascript.
Ten link daje Ci inne opcje, jeśli ich potrzebujesz http://cristian.sulea.net/blog/disable-browser-caching-with-meta-html-tags/
lub możesz po prostu utworzyć taki przycisk
odświeża się i unika buforowania, ale będzie tam na twojej stronie do zakończenia testowania, wtedy możesz go zdjąć. Najlepsza opcja na pięść.
źródło
Mam tendencję do tworzenia wersji mojego frameworka, a następnie stosuję numer wersji do skryptów i ścieżek stylów
źródło
zamknij i otwórz przeglądarkę po wykonaniu kodu w konsoli.
źródło
window.location.reload(true)
wydaje się być przestarzały w standardzie HTML5. Jednym ze sposobów na zrobienie tego bez używania ciągów zapytań jest użycieClear-Site-Data
nagłówka , który wydaje się być ustandaryzowany .źródło
Ponieważ pamięć podręczna przeglądarki przechowuje ten sam link, należy dodać losowy koniec adresu URL.
new Date().getTime()
wygenerować inny numer.Poprostu dodaj
new Date().getTime()
koniec linku jak połączenieWynik:
https://stackoverflow.com/questions.php?1571737901173
źródło