Güncelleme: AppCache, 2015 yazında artık en iyi çözüm olmaktan çıktı. Yeni öneri, bunun yerine Service Workers kullanmaktır. Ancak, Hizmet Çalışanları hala IE ve Safari'de taslak (muhtemelen: hayır) desteği ile deneysel.
Alternatif olarak, birçok derleme aracı, OP'lerin sorusunu ele almak için önbellek bozmayı ve "sürüm oluşturma" tekniklerini sorunsuz bir şekilde birleştirir. WebPack muhtemelen bu alandaki mevcut liderdir.
Bu kullanarak için iyi bir kullanım örneği olabilir HTML5 en AppCache
Muhtemelen dağıtım komut içine bu adımların bazılarını otomatik isterdim, ama burada seni almak için yararlı bulabileceğiniz bazı koddur başladı.
Öncelikle, appcache bildirim dosyanızı oluşturun. Bu, aynı zamanda, appcache manifest dosyasının tarihini açık bir şekilde değiştirinceye kadar, istemcinin tarayıcısındaki kaynakları önbelleğe almanıza da olanak tanır.
/app.appcache:
CACHE MANIFEST
#v20150327.114142
CACHE:
/appcache.js
/an/image.jpg
/a/javascript/file.js
http://some.resource.com/a/css/file.css
NETWORK:
*
/
app.appcacheyılında hat #v20150327.114142
üzerine açıklama biz apaçık değişti ve kaynaklar yeniden yüklenmesi gerektiğini tarayıcıya işaret nasıl. Dosya, önceki sürümden tarayıcıya farklı göründüğü sürece herhangi bir şey olabilir. Uygulamanızda yeni kodun dağıtımı sırasında, bu satır değiştirilmelidir. Bunun yerine bir yapı kimliği de kullanabilir.
<html manifest="/app.appcache"></html>
Son olarak, herhangi bir değişiklik için uygulama önbelleğini kontrol etmek için bazı JavaScript eklemeniz gerekir ve eğer:
İkinci olarak, uygulama önbelleğini kullanmak istediğiniz sayfalarda gibi başlık etiketini değiştirmek Orada bir şeyler yap. İşte bir Angular module.
appcache.js: Bu yanıt için, burada bir vanilya örnek AppCache ise durumunuza için çalışmaz eğer,
window.applicationCache.addEventListener('updateready', function(e) {
if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
// Browser downloaded a new app cache.
// Swap it in and reload the page to get the latest hotness.
window.applicationCache.swapCache();
if (confirm('A new version of the application is available. Would you like to load it?')) {
window.location.reload();
}
}
else {
// Manifest didn't changed. Don't do anything.
}
}, false);
Alternatif olarak, daha getto çözüm Basit bir API son nokta oluşturmak olacaktır geçerli yapı kimliğini veya son dağıtım tarihi zamanını döndürür. Açısal uygulamanız zaman zaman bu uç noktayı vurur ve sonucu dahili sürümüyle karşılaştırır ve farklıysa kendini yeniden yükler.
Veya, ben varlıkların canlı/yerinde-yeniden yükleme kullanmak için ne kadar bir fikrin iyi emin değilim gelişiminde çok yararlı olurken, canlı-yeniden yükleme komut dosyası (example) düşünebilirsiniz, ama üretim.
Vay! AppCache ise. Sanırım peşindeyim için biraz fazla olabilir ... özellikle de IE9'un destekli görünmediğini ve Firefox'un kullanıcı izni gerektirdiğini görüyorum. Gerçekten olsa 'getto' çözümün fikir gibi - bir dizi aralıklarla bir API son nokta denetimi ve gerekirse() window.location.reload çağırarak.Aslında bana karşı güzel ve basit görünüyor ... ama eminim ki birisi bana aynı şeyi aynen socket.io ile yapabildiğimi söyleyeceğinden eminim .... – Andrew
yea; socket.io ile yapabilirdiniz .. ama bu sadece "gerçek zamanlı" kod güncellemeleri için çok fazla yük. Sunucuyu zaman aşımına göre pinglemek yeterlidir (ve daha ucuz kaynaklar kullanırsınız; açık soket bağlantılarından veya endişelenirken yük dengeleme hakkında endişelenmenize gerek kalmaz). Tabii ki uygulamanız halihazırda kullanılmıyorsa socket.io. Sonra daha mantıklı. –
Evet - Ben de aynı şeyi düşünüyorum ... çok fazla yük. Önümüzdeki birkaç ay içinde socket.io'yu ekleyeceğiz, ancak gerçekte yapana kadar API ping yaklaşımını kullanacağımızı düşünüyorum. Cevabınız için teşekkürler! – Andrew