Testuję kod html / js na moim lokalnym hoście (Windows 7, Chrome v79.0.3945.130 (64-bit)) i około 50% zmian kodu czasu nie jest odzwierciedlonych w przeglądarce (widzę to w Narzędziach dla programistów / źródłach ).
W Internecie jest mnóstwo porad, ale żadna z nich nie działa:
- Kliknij prawym przyciskiem myszy na przeładowanie i wybierz „Opróżnij pamięć podręczną i przeładuj mocno” - nie pomaga w 30% przypadków.
- Wyłącz pamięć podręczną na karcie Sieć w Narzędziach Chrome Chrome - nie pomaga.
- Dodaj
<meta http-equiv="Cache-control" content="no-cache">
w nagłówku - nie pomaga. - Zastąp
<script src="common.js"></script>
przez<script src="common.js?blabla"></script>
- pomaga w 60% przypadków, ale musisz to zrobić, gdy każda zmiana jest ogromnym obowiązkiem. Ponadto nie działa ze zmianami HTML. - Skopiuj plik do nowego pliku (np. Index.html do index2.html) i zamień nazwę pliku w kodzie - zawsze działa, ale jest to jeszcze większy obowiązek.
Dokładnie taki sam problem występuje, gdy przesyłam kod do github.io
Pomóż mi to zrobić, aby strona natychmiast odzwierciedlała zmiany w kodzie.
Edycja: Utworzyłem plik index3.html i umieściłem tam tylko „witaj świecie”. Otwarty plik w przeglądarce. Zmieniono na „hello world2” - przeglądarka zaktualizowała treść. Zmieniono na „hello world3” - przeglądarka nadal wyświetlała „hello world2” nawet po wielu przeładowaniach i „Empty cache and hard reload”. Zmieniłem na „hello world4” - przeglądarka nadal wyświetla „hello world2”. W ciągu 4 godzin zmieniłem na „hello world5” - przeglądarka nadal wyświetla „hello world2”. Ten plik edytowałem za pomocą podstawowego notatnika.
Edycja2: Ludzie wciąż pytają, jakiego serwera używam. To wygląda na część problemu. Niestety nie wiem i nie wiem, co dokładnie muszę zrobić, aby to sprawdzić. Oto wszystko, czego do tej pory się dowiedziałem:
- Mam
inetpub/wwwroot
katalog, w którym umieszczam pliki HTML i JS, a następnie otwieram plik index.html w przeglądarce pod adresemhttp://localhost/
. - Mój panel Sieć w Narzędziach dla programistów wygląda następująco: link do obrazu .
- Konfiguracja serwera była bardzo szybka i nie wymagała instalowania dodatkowego oprogramowania. Nie używam node.js.
- Jest iisstart.htm o,
inetpub/wwwroot
a kiedy otwieramhttp://localhost/iisstart.htm
, mówi IIS7.
źródło
index.html
kątem czegoś takiego jak nagłówekX-Powered-By
lub,Server
który może dać podpowiedź na serwerze internetowym. Google w poszukiwaniu ścieżki do plikuinetpub/wwwroot
silnie wskazuje na serwer IIS.Odpowiedzi:
Użycie parametru to właściwy sposób! Tutaj możesz dodać numer wersji, którą zmieniasz tylko przy dużych zmianach ręcznie, a do debugowania możesz ustawić go na Date.time (), więc w tagu <head> wymusza to zastąpienie wszystkich wersji buforowanych, ponieważ parametr jest zawsze nowy jeden:
Mam nadzieję że to pomoże!
źródło
W serwerze Windows IIS7 działającym w systemie Windows 7, aby zapobiec buforowaniu zawartości, należy wprowadzić zmiany w jednym z plików konfiguracyjnych o nazwie
web.config
. Pliki konfiguracyjne dla IIS 7 i znajdują się w późniejszym%WinDir%\System32\Inetsrv\Config folder
gdzie%WinDir%
jest folder, w którym jest zainstalowany system Windows (zazwyczajC:/Windows
).Utwórz kopię zapasową
web.config
pliku przed edycją, aby móc go przywrócić, jeśli zmiany, które wprowadzisz w pliku, spowodują jego uszkodzenie.Dodaj do
web.config
pliku następujące elementy, aby zapobiec buforowaniuindex.html
:web.config
Tutaj masz ścieżkę do pliku: Dokument systemu Windows: Dokumentacja konfiguracjiTutaj mam konfigurację pamięci podręcznej: Jak wyłączyć buforowanie pliku HTML aplikacji jednostronicowej udostępnianej przez IIS?
źródło
projectName/index.html
, którą kopiuję z adresu URL w przeglądarcehttp:/localhost/projectName/index.html
. Wynik - brak wpływu na problem z buforowaniem.web.config
plik w folderze głównym witryny (w folderze, w którym znajduje się witryna) i zmienić ścieżkę z powrotem na po prostuindex.html
i zobaczyć, czy to działa.Miałem ten sam problem i oto moja lista kontrolna:
<%Response.Expires=1440%>
w wielu liniach kodu ASP i pokonałem wszystkie inne ustawienia! W phpsession_cache_expire
może zrobić to samo.http-equiv="Cache-control"
nagłówki HTML (zdałeś ten test!).Na koniec muszę powiedzieć, że we wszystkich powyższych sytuacjach zaznaczenie opcji Wyłącz pamięć podręczną w karcie Newtwork w konsoli Chrome zawsze działało dla mnie, aby wyświetlić nową wersję stron, ale jest to dobre tylko do celów debugowania, a użytkownicy nie zrobią tego!
źródło
W konkretnym przypadku korzystania z Google Chrome spróbuj: Otwórz Narzędzia deweloperskie -> Przejdź do zakładki „Sieć”. Zaznacz pole wyboru „Wyłącz pamięć podręczną”, a następnie odśwież stronę.
Jednak w celu propagowania zmian wśród użytkowników, bez konieczności częstego odświeżania strony itp., Musisz dołączyć wersje plików na końcu każdego pliku, do którego istnieje odwołanie, w przypadku plików, które często się zmieniają (tak jak wskazałeś). Na przykład:
Do
v=20b379f72a37
końca dołączany jest automatycznie wygenerowany skrót pliku z zawartością pliku.źródło
To długa szansa - ale jakiego edytora / IDE używasz? Jakie zmiany wprowadzasz w pliku index.html?
Czy możesz podać przykłady takich modyfikacji, które nie są odzwierciedlane podczas zapisywania i próby załadowania pliku?
Chciałbym spróbować odtworzyć Twój problem. Z tego, co sugerują ludzie, nie wynika, że problem dotyczy samego kodu. Podejrzewam, że jest to problem środowiskowy, ale potrzebuję więcej informacji, aby potwierdzić moje podejrzenia.
źródło
To, co piszesz w meta HTML, jest zaleceniem dla przeglądarek, a nie ścisłą instrukcją. Jeśli w przeglądarce jest włączone ścisłe buforowanie, to nie pomoże.
Rozwiązania są dobrze opisane: https://curtistimson.co.uk/post/front-end-dev/what-is-cache-busting/
Wolę po stronie serwera dodać do skryptów wersję z datą ostatniej aktualizacji samego pliku.
Gdzie 1579780745150 to Uniksowy znacznik czasu aktualizuje sam plik myScript.js . Działa tylko z własnymi plikami, ale zewnętrzne nie są potrzebne. Najczęściej w nazwie pliku znajduje się wersja.
źródło
Jest to prawdopodobnie bardzo frustrujące i nie wygląda na to, że robisz coś złego.
Problem prawdopodobnie polega na tym, że coś między przeglądarką a plikiem skryptu, który wywołujesz, wykonuje buforowanie.
Aby ustalić, co to jest, pozwól, że zapytam, jak przeglądasz adres URL hosta lokalnego?
Przykłady:
Jeśli działasz,
file://path/to/file.html
oznacza to, że nie przeglądasz serwera WWW / proxy. Jeśli takhttp://[something]/file.html
, to używasz jakiegoś serwera WWW i prawdopodobnie jest to winowajcą. Poszukaj jakiegoś ustawienia, w którym możesz wyłączyć buforowanie.Jeśli nie używasz serwera WWW i dosłownie przeglądasz bezpośrednio lokalny plik HTML bez serwera WWW, sugerowałbym, że winowajcą jest przeglądarka. W takim przypadku sugeruję wyłączenie buforowania przeglądarki, jak sugerował Martin Shishkov .
źródło
http://localhost/ProjectName/index.html
gdzie to ustawienie, w którym można wyłączyć buforowanie może być?file://path/to/projectName/index.html
. Spowoduje to usunięcie serwera WWW z równania. Aby kontynuować używanie IIS i po prostu naprawić pamięć podręczną, zapoznaj się z tym artykułem: support.microsoft.com/en-us/help/247404/…Chrome robi to tak, że jeśli plik nie zmienił się zbytnio, nie wiem, co to znaczy, użyje „skompilowanej” wersji pamięci podręcznej. Dla html oznacza parsowane drzewo don. Dla wstępnie skompilowanego kodu JS itp.
Zwykle można to rozwiązać, wiele frameworków używa skrótów w nazwach plików, takich jak
main.md5hash.js
:, ponieważ zmiana nazwy pliku unieważnia pamięć podręczną.Wtedy zostaniesz z ewentualnym brakiem aktualizacji HTML. I dla jasności, nie jestem pewien, zawsze możesz dodać komentarz z losową kroplą ... jak randka.
źródło
Opierając się na aktualizacjach odpowiedzi, powiedziałbym, że twój problem jest spowodowany przez IIS v7, że używa pamięci komputera do buforowania, a nie lokalnego dysku twardego, dlatego
Hard reload
wszystkie inne metody wydają się nie działać poprawnie.Mógłbym wymyślić 3 rozwiązania:
1. Naprawianie problemu z pamięcią podręczną IIS: (Nie przetestowano, ponieważ nie mam komputera z IIS)
extension
, które chcesz wyłączyć w nich pamięć podręczną, tj..aspx
.Css, .js itp. (Chyba jeden?Źródło rozwiązania - Przeczytaj więcej o pamięci podręcznej IIS 7
2. Korzystanie z niektórych alternatyw dla IIS Jest ich sporo, ale polecam (na podstawie moich doświadczeń) WAMP lub XAMPP Oba zapewniają lepsze „środowisko” programistyczne i oba obsługują system Windows 7. Ponadto, jeśli znasz się na VS Code możesz po prostu użyć rozszerzenia Live Server .
3. Użyj Chrome Podczas programowania trybu Incognito . (Nie jestem pewien, czy to działa dla IIS7)
źródło
.js
plikami? zależy to od wprowadzanych zmian.