2013-01-16 20 views
6

Mam uruchomioną aplikację na hostgatorze. Po wprowadzeniu zmian w plikach js moi użytkownicy nie widzą zmian, dopóki nie wyczyści ich pamięci podręcznej. Czy jest to jedyna opcja do wprowadzenia zmian w mojej aplikacji? Zasadniczo mam wprowadzić zmiany, zaktualizować pliki, a następnie poprosić wszystkich użytkowników o wyczyszczenie ich pamięci podręcznej?Jak wyczyścić pamięć podręczną klientów przy następnym zalogowaniu

Odpowiedz

10

Musisz użyć wersjonowania na swoim pliku zawiera. Za każdym razem, gdy zmienisz URI pliku, przeglądarka nie znajdzie dopasowania do pamięci podręcznej i ponownie pobierze zawartość.

Na przykład:

<script type="text/javascript" src="include/232/init.js"></script> 

gdzie 232 to numer wersji modyfikacji, które powinny zostać zmienione w dowolnym momencie zwolnić nowego kodu.

Alternatywnie, można użyć ciągi zapytań:

<script type="text/javascript" src="include/init.js?232"></script> 

Chodzi o to, że należy zmienić plik obejmują URI w jakiś sposób, kiedy chcesz, aby odwiedzający ponownie pobrać plik.

Jeśli używasz PHP lub innego języka po stronie serwera, można skonfigurować ten wersjonowanie nastąpić automatycznie, gdy plik zawiera modyfikowane są: http://derek.io/blog/2009/auto-versioning-javascript-and-css-files/

3

Możesz dodać obojętne ciągi zapytań do adresu URL aktywów:

<link href="http://mysite.com/main.css?v=1" rel="stylesheet" /> 

Potem, kiedy tylko dokonywać żadnych zmian w CSS, po prostu podbić numer wersji. Ta technika nazywa się kradzież pamięci podręcznej. Search Google for that, a otrzymasz wiele różnych wersji.

2

Jeden trick, aby obejść ten problem jest do dołączania ciąg kwerendy z pewnego rodzaju wersji lub sygnatury czasowej do wywołań JavaScript link. Na przykład:

<script src="myexternal.js?20130116" type="text/javascript"></script> 

Ten przykład jest prosty, ale dowodzi tego. Zasadniczo oznacza to, że przeglądarka załaduje plik, jeśli nie rozpozna pełnej ścieżki. Za każdym razem, gdy zmieniasz plik javascript i chcesz, aby użytkownicy pobierali najnowszą wersję, po prostu zaktualizuj ten znacznik czasu lub wartość po znaku zapytania (ciąg zapytania).

2

Nie można wyczyścić pamięć podręczną przeglądarek swojego klienta, ale można użyć technik CacheBuster takich jak dodawanie wersjonowanie do plików

<link rel="stylesheet" href="/css/example.css?v1.0" type="text/css" /> 

A potem, kiedy dokonać zmiany

<link rel="stylesheet" href="/css/example.css?v1.1" type="text/css" /> 

Może to być znacznik czasu lub coś innego, po prostu musi być inny.

1

Prostą sztuczką, której czasami używam, jest dodanie do ścieżki pliku JavaScript/CSS niektórych nieprzyzwoitych parametrów. Przeglądarka zasadniczo zobaczy inny adres URL i nie będzie używać jego buforowanej wersji.

$jsFile = '/js/myFile.js';    // probably cached 
$jsFile = '/js/myFile.js?r='.time();  // won't ever be cached 

Naprawdę nie można wyczyścić pamięć podręczną dla klientów, ale może oszukać przeglądarkę klientów na myślenia, że jest to pierwszy raz, gdy widzi ten plik i będzie go pobrać ponownie.

Nie zapomnij wyłączyć tej opcji po uzyskaniu stabilnej wersji. Buforowanie plików to świetny sposób na przyspieszenie czasu ładowania aplikacji.

1

Podstęp, którego używam, aby uniknąć tego problemu, to zmodyfikować adres URL zaktualizowanego skryptu. Zmusi to klienta do ponownego pobrania skryptu, ponieważ nazwa zasobu ressource jest inna.

Najprostszy sposób: użyj numeru wersji na końcu adresu URL js/my-script.js?v=1.0.

Lepszy sposób na to (100% obsługiwane dla wszystkich nawigatorów): zmień samą nazwę pliku js/my-script.v1.0.js.

+0

Dlaczego pierwsza nie jest w 100% obsługiwana? – Ian

+0

Wygląda na to, że dodajesz ciąg zapytania do zasobów statycznych [zapobiega buforowaniu w niektórych serwerach proxy] (http://www.mikebrittain.com/blog/2009/06/11/caching-urls-with-query-strings/). Chcemy być w stanie wyczyścić wersję pliku z pamięci podręcznej w pewnym momencie, nie zapobiegając całkowicie mechanizmowi buforowania. Jednakże, jeśli nie jesteś guru wydajności, pierwsze rozwiązanie jest świetne. To ta, która była używana do motywów Wordpress. –

+0

Hmm bardzo interesujące, dzięki za udostępnienie linku. Chociaż nie sądzę, że Squid jest używany w przeglądarkach (tylko proxy, jak zauważyłeś). Więc byłoby miło móc "oszukać" buforowanie w każdym miejscu, dokładnie w tym czasie, w którym chcesz, ważne jest, aby oszukać przeglądarkę ... więc użycie ciągu zapytania nie powinno stanowić problemu. Chociaż osadzenie "wersji" w nazwie pliku i użycie reguły przepisywania jest dość sprytne ... Zajmę się tym z moich własnych rzeczy. – Ian

Powiązane problemy