2013-01-16 20 views
6

Hostgator üzerinde çalışan bir uygulamam var. Js dosyalarında değişiklik yaptığımda, kullanıcılar önbelleğini temizleyene kadar değişiklikleri görmüyor. Bu, değişiklikleri uygulamaya itmemin tek yolu mu? Temel olarak, değişikliği yapmam, dosyaları güncellemem ve tüm kullanıcıların önbelleklerini temizlemesini istemem gerekiyordu. Eğer CSS herhangi bir değişiklik yaptığınızda, SonraBir dahaki sefere oturum açtığımda müşterilerimin önbelleğini nasıl temizlerim

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

sadece sürüm numarasını yükseltmek:

cevap

10

Dosyanızdaki sürümleri kullanmanız gerekir. Dosyanızın URI'sini değiştirdiğinizde, tarayıcı bir önbellek eşleşmesi bulamaz ve içeriklerini yeniden indirir. Örneğin

:

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

232 yeni kod serbest zaman değiştirilmesi gerektiğini sizin değiştirilebilir sürüm numarasıdır.

Alternatif olarak, sorgu dizeleri kullanabilirsiniz:

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

nokta dosyayı değiştirmek gerektiğidir URI içerir ziyaretçilerinizin dosyayı yeniden indirin istediğinizde bazı tarzda.

PHP veya başka bir sunucu tarafı dilini kullanırsanız, dosya değiştirilmiş dahil ettiğinde kurulum bu sürüm otomatik olarak gerçekleşmesi yapabilirsiniz: Bunu aşmanın http://derek.io/blog/2009/auto-versioning-javascript-and-css-files/

3

Sen varlık URL'ye kukla sorgu dizelerini ekleyebilirsiniz.

Bu teknik önbellek bozma olarak adlandırılır. Search Google for that ve birçok farklı varyasyon elde edersiniz.

2

Bir hile çeşit sorgu dizesi eklemeye etmektir link Javascript çağrıları için sürüm veya zaman damgası. Örneğin:

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

Bu örnek basittir, ancak noktayı kanıtlar. Temelde bu, tarayıcıya tam yolu tanımıyorsa dosyayı yüklemesini söyler. Her zaman javascript dosyanızı değiştirirsiniz ve kullanıcılarınızın en son sürümü almalarını istersiniz, sadece soru işareti (sorgu dizesi) sonrasında zaman damgasını veya değeri güncelleyin.

2

Sen müşterinizin tarayıcıların önbelleği temizlemek olamaz ama böyle dosyalarınızı

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

Ve üzere sürüm ekleme gibi önbellek bozma teknikleri kullanabilirsiniz o zaman bir değişiklik yaptığınızda

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

Bir zaman damgası olabilir ya da her neyse, sadece farklı olmalı.

1

Bazen kullandığım basit bir numara, JavaScript/CSS dosyasının yoluna bazı kukla parametreler eklemektir. Tarayıcı esasen farklı bir URL görecek ve önbelleğe alınmış sürümünü kullanmayacaktır.

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

Gerçekten istemciler önbelleği temizlemek değil, ancak bu bu dosyayı gördükten ilk kez olduğunu düşünerek içine istemciler tarayıcı kandırmak olabilir ve tekrar indirecektir.

Kararlı bir sürüme ulaştıktan sonra bunu devre dışı bırakmayı unutmayın. Dosyaları önbelleğe almak, uygulamanın yükleme süresini hızlandırmak için harika bir yoldur.

1

Bu sorunu önlemek için kullandığım numara, güncelleştirilmiş komut dosyasının URL'sini değiştirmek. Bu, ressource adı farklı olduğu için istemciyi komut dosyasını yeniden yüklemeye zorlar.

Bunu yapmanın en kolay yolu, URL js/my-script.js?v=1.0'un sonunda bir sürüm numarası kullanın.

Bunu yapmanın daha iyi bir yolu (tüm gezginler için% 100 desteklenir): dosya adını kendisi js/my-script.v1.0.js olarak değiştirin.

+0

Neden ilk% 100 desteklenmiyor? – Ian

+0

Statik kaynaklarda bir sorgu dizesi eklenmesi [bazı proxy'lerde önbelleğe almayı engelleme] gibi görünüyor (http://www.mikebrittain.com/blog/2009/06/11/caching-urls-with-query-strings/). Önbelleğe alınmış dosya sürümünü, bir süre önbelleğe alma mekanizmasını tamamen engellemeyen bir zamanda temizleyebilmeyi istiyoruz. Ancak, bir performans gurusu değilseniz, ilk çözüm mükemmeldir. Wordpress temaları için kullanılan bir tanesi. –

+0

Hmm çok ilginç, bağlantıyı sağladığınız için teşekkürler. Squid'nin tarayıcılarda kullanıldığını düşünmeme rağmen (sadece işaret ettiğin gibi vekiller). Yani her yerde önbelleğe almak için "kandırmak" güzel olurdu, tam istediğinizde, önemli olan tarayıcıyı kandırmaktır ... bu yüzden sorgu dizesini kullanmak sorun olmamalı. Dosya adındaki "sürümü" nü gömmek ve yeniden yazma kuralı kullanmak oldukça akıllıca olsa da ... Kendi eşyamdan bazılarına bakacağım. – Ian

İlgili konular