Bir hizmet çalışanının dağıtılması bir web sitesinin davranışını beklenmedik şekillerde değiştirebilir. Workbox, hizmet çalışanı yazma ve dağıtmayı kolaylaştırdığından Service Worker'ın dağıtıldıktan sonra web sitesi üzerindeki bazı etkilerini gözden kaçırabilir.
Bu, Workbox'ı kullanmanın kötü sonuçlara yol açacağı anlamına gelmez. Yalnızca, sunduğu rahatlık, bir hizmet çalışanının dağıtımında neler yaşandığını bilmediğinde bazı tuzaklara düşmeyi kolaylaştırabilir.
Önbelleğe alma tehlikeleri
Önbelleğe alma, bu dokümanlarda daha önce ele alınmadan, uygulamanın nasıl olumsuz etkileyebileceğine değinmemiştir. Çok fazla öğeye önbelleğe alma uygularsanız veya hizmet çalışanı, sayfa kritik öğelerin yüklenmesini tamamlama fırsatı bulamadan önce kaydedildiyse sorunlarla karşılaşabilirsiniz.
Varsayılan workbox-webpack-plugin
davranışı, hizmet çalışanına, oluşturulan öğeleri otomatik olarak önceden önbelleğe alma talimatı vermek olduğundan, benimsenmenin önündeki engel düşük olduğundan bu durum kolayca gözden kaçabilecek bir şekilde sorun yaratabilir.
Bir hizmet çalışanı, kurulum sırasında öğeleri önbelleğe aldığında bir veya daha fazla ağ isteği aynı anda başlatılır. Bu, doğru zamanlama yapılmazsa kullanıcı deneyimi için sorun oluşturma potansiyeline sahiptir. Zamanlama tam doğru olsa bile, önceden önbelleğe alınan öğelerin miktarı bir şekilde sınırlanmazsa verilerin boşa harcanmasına yol açabilir.
Her şey zamanlamada
Bir hizmet çalışanı herhangi bir şeyi önbelleğe alırsa kaydedildiği saat önemlidir.
Hizmet çalışanları genellikle satır içi <script>
öğeleri kullanılarak kaydedilir.
Bu, HTML ayrıştırıcıların Service Worker kayıt kodunu sayfanın kritik öğeleri yüklenmeden önce bulabileceği anlamına gelir.
Bu bir sorundur. İdeal olarak, bir hizmet çalışanı en kötü durumda performansı nötr tutmalı, performansı daha da kötüleştirmemelidir. Kullanıcılara bir iyilik yapın ve sayfanın load
etkinliği tetiklendiğinde bir hizmet çalışanı kaydedin.
Bu, önbelleğe alma işleminin bir sayfanın kritik öğelerinin yüklenmesini engelleme olasılığını azaltır. Bu da dolayısıyla sayfa, daha sonra ihtiyaç duyulmayacak öğelere yönelik ağ istekleriyle mücadele etmek zorunda kalmadan daha hızlı etkileşimli hale gelebilir.
Veri kullanımına dikkat edin
Önbelleğe alma, zamanlamadan bağımsız olarak ağ isteklerinin gönderilmesini içerir. Önbelleğe alınacak öğelerin manifest dosyası dikkatli bir şekilde düzenlenmezse bir miktar israf oluşabilir.
Boşa giden veriler, önbelleğe alma işleminin potansiyel bir sonucudur, ancak herkesin hızlı internete, hatta sınırsız veri planlarına erişimi yoktur! Önbelleğe alma işlemi yaparken, pahalı varsayımlarda bulunmak yerine özellikle büyük varlıkları kesmeyi ve bunları yakalamak için çalışma zamanında önbelleğe alma özelliğini kullanmayı düşünün.
Hizmet çalışanı başlatma, ağ isteklerini geciktirebilir
Service Worker'lar, web sitesinin geri kalan kodundan ayrı bir işlemde çalışır. Bu işlem sık sık başlar ve durur. Service Worker'ın etkin olmadığında bir getirme etkinliği işlemesi gerektiğinde, tarayıcının öncelikle Service Worker'ı başlatmak için zaman ayırması gerekir. Bir isteğin işlenmesinden önceki bu ek ek yük, ağ yerine önbellekten yanıt sunma avantajıyla karşılaştırıldığında azdır.
Önbellekten sunum yapamayan ve ağa gitmesi gereken stratejiler kullanılırken, özellikle de gezinme isteklerini işlerken önyükleme süresi her zaman biraz gecikme ekler. Cihaz özelliklerine ve/veya CPU basıncına bağlı olarak, bir gezinme isteğinde, hizmet çalışanı başlatma işlemlerinin yavaş olması nedeniyle kayda değer bir gecikme yaşanabilir. Bu gecikmenin farkında olmadan bir hizmet çalışanının dağıtılması, kullanıcıların istemeden performans isabeti yaşayabileceği anlamına gelir.
Bu sorun Gezinme Ön Yüklemesi ile çözülmüştür, ancak henüz tüm tarayıcılarda desteklenmemektedir. Ancak bu yöntem dikkate değer ve bu belgelerin sonraki bölümlerinde ele alınmıştır.
Önbellek öncelikli stratejiler geri tepebilir
Önce önbelleğe başvuran (veya yalnızca önbelleğe başvuran) önbelleğe alma stratejileri, hem çevrimdışı erişim hem de performans için idealdir. Ancak bazı durumlarda sorunlara neden olabilmektedir.
Sürüm değiştirilmemiş statik öğelerin çalışma zamanında önbelleğe alınması
Paketleyiciler genellikle dosya adında içeriğe dayalı karma (örneğin, styles.a4edf38c.css
) bulunan statik öğeleri yayınlar.
Önbelleğe alma stratejileri kullanan hizmet çalışanları, statik öğeler için ilk olarak önbelleğe
danışan ve sayfa işaretleme için ağa öncelik veren bir strateji kullanan hizmet çalışanları, güncellenen öğelere her zaman ağdan alınan işaretlemede referans verildiğinden önbelleğe alma sorunları olmamalıdır.
Sürümü değiştirilmemiş statik öğelerin, bu stratejiler kullanılarak çalışma zamanı sırasında önbelleğe alındığı durumlarda sorunlar ortaya çıkar.
Bir web sitesinin işlevselliği app.js
tarafından sağlanıyorsa ve önbellek öncelikli çalışma zamanı stratejisi kullanılıyorsa app.js
, daha sonra dosya adında değişiklik yapılmadan güncellenirse başlangıçta önbelleğe alınan sürüm, güncellenmek yerine önbellekten sunulmaya devam eder.
Çözüm, ağ öncelikli veya yeniden doğrulama gibi güncellemeler için ağa danışan bir strateji kullanmaktır. Alternatif olarak, Workbox'ın önbelleğe alma mantığı bunları güncel tutacağından, derleme araçları bu öğeler için bir ön önbellek manifesti oluşturabilir.
Ne olursa olsun, statik öğeler için öğe adındaki bir karma veya sorgu dizesi kullanılarak sürüm oluşturmayı kesinlikle değerlendirin. Bu, statik öğeler için önbellek öncelikli çalışma zamanı stratejilerini kullanan hizmet çalışanlarındaki eski öğelerle ilgili sorunları önler.
Mind depolama kotaları
Zaman zaman hizmet çalışanı güncellemelerinin kullanıma sunulması yaygındır. Güncellemeler kullanıma sunulduğunda, genellikle süresi dolmuş adlara sahip eski önbellekler, yeni hizmet çalışanının etkinleştirilmesi sırasında kısaltılır.
Ancak bazı hizmet çalışanı yinelemeleri uzun ömürlüdür veya önbellek adları yeni güncellemelerde güncellenmeyebilir. Bu durumda, güncellemeler kullanıma sunuldukça eski statik öğeler önbelleklerde birikebilir. Tarayıcılar depolama alanı kotaları belirler ve sınırlar değişiklik gösterebilir. Bu nedenle, onlara dikkat etmek önemlidir.
Workbox bu sorunları başarıyla hafifletiyor olsa da depolama alanı kotaları aşılabilir. workbox-expiration modülü ile önbellekler üzerinde daha hassas bir denetime sahip olabilirsiniz.
Korkmayın
Bir hizmet çalışanının dağıtımı basit bir şey değildir. Ancak Workbox'la bir hizmet çalışanı dağıtmanın neleri gerektirdiğine dair planlama yaparak ve dikkatli bir şekilde çalışarak korkutucu bir iş olmaması lazım. Devam ettikçe bu dokümanlar, söz konusu endişeleri dikkatli bir şekilde ve güvenle ele almanıza yardımcı olacaktır.