Wymuś Google Chrome, aby sprawdzał nowe pliki JavaScript za każdym razem, gdy uzyskuję dostęp do strony internetowej

26

Jeśli więc przejdę do opcji internetowych w Internet Explorerze: enter image description here

Mogę dostosować ustawienia, gdy IE sprawdza aktualizacje: enter image description here

Czy mogę zrobić coś podobnego w Google Chrome? Teraz, gdy zmienię plik JavaScript i debuguję z Visual Studio, Chrome zawsze będzie korzystał z wersji buforowanej, a nie ze zmodyfikowanej wersji. Aby móc korzystać z bieżącej wersji, muszę ręcznie usunąć moje tymczasowe pliki internetowe / pamięć podręczną, co jest naprawdę denerwujące.

EJoshuaS
źródło
13
Dlaczego zamiast tego nie wyłączasz buforowania w Visual Studio? (Poważnie, kto do diabła projektuje IDE z buforowaniem?)
jpmc26
1
@ jpmc26 Jakiego buforowania?
EJoshuaS
20
Sformułowałem mój ostatni komentarz luźno; przepraszam, jeśli to czyniło to niejasnym. Przegląda tylko pliki pamięci podręcznej, jeśli serwer odsyła określone nagłówki. To głupie, że serwer programistyczny Visual Studio domyślnie wysyła nagłówki pamięci podręcznej, ponieważ powinny to być zmiany w tych plikach spodziewany . Dodatkowe ładowanie strony w częściowej sekundzie jest warte, by nie zajmować się problemami z przestarzałych plików JS i CSS buforowanych w przeglądarce. Mam szczerą nadzieję, że jest jakiś sposób, aby go wyłączyć.
jpmc26
1
Nie udało się znaleźć żadnych opcji Visual Studio, ale zmiana web.config w rozwoju może rozwiązać problem buforowania w studio wizualnym. iis.net/configreference/system.webserver/staticcontent/…
GER
1
Rozszerzenie Chrome „Cache Killer” rozwiązało to dla mnie, nie wiem dlaczego, ale ctrl + f5 czasami nie działa dla mnie
flagg19

Odpowiedzi:

54

Opcja 1: tymczasowo wyłącz pamięć podręczną

  1. Otwórz narzędzia dla programistów (naciśnij F12 lub Menu, Więcej narzędzi, Narzędzia programistyczne)
  2. Otwórz ustawienia narzędzi programisty (naciśnij F1 lub DevTools Menu, Settings)
  3. Zaznacz „Wyłącz pamięć podręczną (podczas gdy DevTools jest otwarty)” w nagłówku Sieć panelu Preferencje

Opcja 2: Wyłącz pamięć podręczną na sesję

Uruchom Chrome za pomocą przełączników wiersza polecenia --disk-cache-size=1 --media-cache-size=1 który ograniczy pamięć podręczną do 1 bajtu, co skutecznie wyłączy pamięć podręczną.

Opcja 3: Ręczne odświeżanie siły

Przeładuj bieżącą stronę, ignorując buforowaną zawartość: Przesunięcie + F5 lub Ctrl + Przesunięcie + r

Skróty klawiaturowe Chrome - Pomoc Chrome (W sekcji „Skróty do stron internetowych”)

Opcja 4: Dodatkowe opcje ponownego ładowania ( Źródło )

Przy otwartych Narzędziach dla programistów kliknij prawym przyciskiem myszy przycisk Załaduj ponownie, aby wyświetlić menu ponownego ładowania z następującymi elementami:

  • Normalne przeładowanie (Ctrl + R)
  • Hard Reload (Ctrl + Shift + R)
  • Pusta pamięć podręczna i twardy przeładowanie
Steven
źródło
1
@ Bruno Odd, zawsze też użyłem ctrl + f5. Właśnie przetestowany i oba wydają się działać.
Jeroen
Sugeruję użycie opcji 2, z niespodzianką. Utwórz osobny skrót do Chrome za pomocą przełączników i nazwij go inaczej. Umieść go na różnych końcach paska zadań systemu Windows.
Christopher Hostage
8

Może nie być w 100% powiązany z odświeżaniem chromu, ale dla dalszego rozwoju. Tak jak powiedział @Dom, możesz dodać? V = # po swoim zasobie. Jednym ze sposobów na zautomatyzowanie tego procesu jest skrócenie zawartości tego pliku i użycie go jako wersji.

Mam kod urywka, jak to zrobić w C # (Razor do wdrożenia), jeśli to może pomóc.

Pomocnik:

public static string HashUrl(string relativeUrl)
    {
        var server = HttpContext.Current.Server;
        if (File.Exists(server.MapPath(relativeUrl)))
        {
            byte[] hashData;
            using (var md5 = MD5.Create())
            using (var stream = File.OpenRead(server.MapPath(relativeUrl)))
                hashData = md5.ComputeHash(stream);

            return relativeUrl.Replace("~", "") + "?v=" + BitConverter.ToString(hashData).Replace("-", "");
        }
        return relativeUrl + "?v=notFound";
    }

Realizacja:

<link rel="stylesheet" [email protected]("~/Controllers/Home/Views/Index.css") />

Mam nadzieję że to pomoże

EDYTOWAĆ --- Niektórzy pytają o pewne środowisko wykonawcze, a przy 1000 małych zasobów zajmuje to około 11 ms.

https://en.code-bude.net/2013/08/07/md5-hashes-in-c-benchmark-and-speed-%E2%80%8B%E2%80%8Boptimization/

enter image description here https://en.code-bude.net/wp-content/uploads/2013/08/md5_performance_benchmark_2.png

fred beauchamp
źródło
2
Zasoby do kontroli wersji takie jak to (lub poprzez osadzenie wersji / skrótu w samej nazwie zasobu) mogą być bardzo pomocne, szczególnie podczas wdrażania aktualizacji w świecie rzeczywistym, gdzie - w przeciwieństwie do tego, co mówią reguły w nagłówku kontroli pamięci podręcznej - wszystko może się zdarzyć, a wielu użytkowników nie będzie wiedziało, jak (lub trzeba) odświeżyć pamięć podręczną. Jeśli (sprawisz, że twoja aplikacja) poprosi o nowo nazwany zasób, nie można go buforować.
TripeHound
1
Czy to nie jest duża utrata wydajności? Hashowanie każdego pliku css i js za każdym razem, gdy link jest wstawiany na stronie ... Czy uruchomiłeś testy porównawcze?
Raidri
2
@Raidri Hashing w locie prawdopodobnie nie jest dobrym pomysłem (nie zauważyłem, że robi to, kiedy pierwszy raz komentowałem). Aktualizowanie odwołań do użycia skrótu lub wersji podczas procesu kompilacji to.
TripeHound
@Raidri Mam raczej niewielką aplikację z dwudziestoma źródłami, które mieszają i nie widziałem różnicy w czasie kompilacji, więc tak naprawdę nie próbowałem tego porównywać. Również nie jestem pewien, czy rozumiem twoje drugie zdanie, ale zasoby są buforowane, a przeglądarka tylko je buforuje, jeśli zmienią się hash = & gt; jeśli zmienisz sam zasób.
fred beauchamp
Hash nie jest obliczany w czasie kompilacji, ale w każdym generowaniu strony. To problem z serwerem i nie ma nic wspólnego z buforowaniem w przeglądarce.
Raidri
5

W innych przypadkach, w których może to nie być możliwe, na przykład chcąc wymusić odświeżenie na komputerze użytkownika końcowego, do którego nie masz dostępu, możesz dodaj numer wersji do nazwy skryptu jako parametr zapytania, dzięki czemu przeglądarka zidentyfikuje go jako inny plik . to znaczy. example.js?v=1. Pamiętaj, że aby wymusić, musisz zmienić numer każdego przeładowania.

Można to również zrobić w przypadku rozwoju lokalnego, ale metoda dev tools jest znacznie bardziej wydajna.

Dom
źródło
3

oprócz odpowiedzi @Steven, gdy otrzymasz Konsola narzędzi programistycznych otwarty, możesz Kliknij prawym przyciskiem myszy na przycisk odświeżania i skorzystaj z rozwijanego menu.

W tym menu dostępna jest opcja „Empty Cache and Hard reload” .

Czy tego szukasz.

Leze
źródło
1
Zakładam, że używasz nieangielskiej wersji Chrome. Używam wersji angielskiej i nazywa się ona „Pusta pamięć podręczna i twardy ładunek”.
Nzall
1
Masz rację, dzięki za poprawną etykietę
Leze
1

Jeśli tworzysz witrynę, powinieneś wiedzieć, że Chrome wymaga must-revalidate ustawienie Cache-Control w celu poprawnego pobrania plików po ich zmianie na serwerze.

Inne odpowiedzi mówią, jak nacisnąć SHIFT-F5, aby zmusić własną wersję Chrome do pobrania wszystkich plików. Ale czy rozsądne jest informowanie wszystkich użytkowników witryny, aby robili to za każdym razem, gdy zmienia się strona? Jeśli ustawisz Cache-Control zawrzeć must-revalidate następnie Chrome sprawdzi, czy jakieś pliki się zmieniły, a następnie pobierze je w razie potrzeby.

Zobacz szczegóły na tym blogu: https://agiletribe.wordpress.com/2018/01/29/caching-for-chrome/

AgilePro
źródło