Workbox v3'ten v4'e geçiş

Bu kılavuzda, Workbox v4'te kullanımdan kaldırılan özellikler ve Workbox v3'ten yükseltme yaparken yapmanız gereken değişiklikler örneklerle açıklanmaktadır.

Zarar Veren Değişiklikler

çalışma kutusu-önbelleğe alma

Önceden önbelleğe alınan girişler için adlandırma kuralı güncellendi. Artık, URL'leri için düzeltme bilgilerine ihtiyaç duyan girişlerde (ör. ön önbelleğe alma manifestinde revision alanı içeren girişler) bu sürüm bilgileri, önbelleğe alma anahtarının bir parçası olarak, orijinal URL'ye eklenen özel bir __WB_REVISION__ URL sorgu parametresinde depolanacaktır. (Daha önce bu bilgiler, IndexedDB kullanılarak önbellek anahtarlarından ayrı olarak saklanıyordu.)

En yaygın kullanım alanı olan workbox.precaching.precacheAndRoute() aracılığıyla ön önbelleğe alma özelliğinden yararlanan geliştiricilerin, hizmet çalışanı yapılandırmalarında herhangi bir değişiklik yapması gerekmez. Workbox v4'e yükseltme yapıldıktan sonra kullanıcılarınızın önbelleğe alınmış öğeleri otomatik olarak yeni önbelleğe alma anahtarı biçimine taşınır ve bundan sonra ön önbelleğe alınmış kaynaklar eskisi gibi sunulmaya devam eder.

Önbellek Anahtarlarını Doğrudan Kullanma

Bazı geliştiricilerin, önbelleğe alma girişlerine workbox.precaching.precacheAndRoute() bağlamı dışında doğrudan erişmesi gerekebilir. Örneğin, ağdan gerçek bir resim getirilemediğinde "yedek" yanıt olarak kullanacağınız bir resmi önceden önbelleğe alabilirsiniz.

Önceden önbelleğe alınmış öğeleri bu şekilde kullanırsanız Workbox v4'ten itibaren, orijinal URL'yi önbelleğe alınmış girişi okumak için kullanılabilecek ilgili önbelleğe alma anahtarına dönüştürmek üzere ek bir adım atmanız gerekir. Bunu yapmak için workbox.precaching.getCacheKeyForURL(originURL) numaralı telefonu arayın.

Örneğin, 'fallback.png' alan adının önceden önbelleğe alındığını biliyorsanız:

const imageFallbackCacheKey =
  workbox.precaching.getCacheKeyForURL('fallback.png');

workbox.routing.setCatchHandler(({event}) => {
  switch (event.request.destination) {
    case 'image':
      return caches.match(imageFallbackCacheKey);
      break;
    // ...other fallback logic goes here...
  }
});

Eski Önbelleğe Alınmış Verileri Temizleme

Workbox v4'teki önbelleğe alma işleminde yapılan değişiklikler, Workbox'ın önceki sürümleri tarafından oluşturulan eski önbelleklerin uyumlu olmadığı anlamına gelir. Varsayılan olarak, bu kaynaklar olduğu gibi bırakılır. Workbox 3 sürümünden Workbox 4 sürümüne yükseltirseniz önceden önbelleğe alınmış tüm kaynaklarınızın iki kopyasına sahip olursunuz.

Bunu önlemek için doğrudan bir hizmet çalışanına workbox.precaching.cleanupOutdatedCaches() çağrısı ekleyebilir veya GenerateSW modunda bir derleme aracı kullanıyorsanız yeni cleanupOutdatedCaches: true seçeneğini ayarlayabilirsiniz. Önbelleği temizleme mantığı, eski önbellekleri bulmak için önbellek adlandırma kurallarına göre çalışır ve geliştiricilerin bu kuralları geçersiz kılma seçeneği vardır. Bu nedenle, güvenliği ön planda tutarak bu özelliği varsayılan olarak etkinleştirmedik.

Bu özelliği kullanırken karşılaşılan sorunlar (ör. silmeyle ilgili yanlış pozitifler) hakkında bize bilgi verin.

Parametre Büyük Harf Kullanımı

workbox.precaching.precacheAndRoute() ve workbox.precaching.addRoute()'e iletilebilecek iki isteğe bağlı parametre, genel büyük/küçük harf kullanma kuralımızı standartlaştırmak için yeniden adlandırıldı. ignoreUrlParametersMatching artık ignoreURLParametersMatching, cleanUrls ise cleanURLs oldu.

workbox-strategies

workbox-strategies içinde işleyici örneği oluşturmanın yaklaşık olarak eşdeğer iki yolu vardır. Stratejinin oluşturucusunu açıkça çağırmak yerine, fabrika yöntemini kullanımdan kaldırıyoruz.

// This factory method syntax has been deprecated:
const networkFirstStrategy = workbox.strategies.networkFirst({...});

// Instead, use the constructor directly:
// (Note that the class name is Uppercase.)
const networkFirstStrategy = new workbox.strategies.NetworkFirst({...});

Fabrika yöntemi söz dizimi v4'te çalışmaya devam edecek olsa da bu söz dizimini kullanmak bir uyarı kaydetmesine neden olur. Geliştiricilerin, gelecekteki v5 sürümünde destek kaldırılmadan önce geçiş yapmalarını öneririz.

workbox-background-sync

workbox.backgroundSync.Queue sınıfı, geliştiricilere isteklerin sıraya nasıl ekleneceği ve yeniden oynatılacağı konusunda daha fazla esneklik ve kontrol sunmak için yeniden yazıldı.

3. sürümde Queue sınıfının kuyruğa istek eklemek için tek bir yolu (addRequest() yöntemi) vardı ancak kuyruğu değiştirmek veya istekleri kaldırmak için hiçbir yolu yoktu.

4. sürümde addRequests() yöntemi kaldırıldı ve aşağıdaki dizi benzeri yöntemler eklendi:

  • pushRequest()
  • popRequest()
  • shiftRequest()
  • unshiftRequest()

Queue sınıfı, 3. sürümde isteklerin ne zaman yeniden oynatıldığını gözlemlemenize olanak tanıyan çeşitli geri çağırma işlevlerini de kabul ediyordu (requestWillEnqueue, requestWillReplay, queueDidReplay). Ancak çoğu geliştirici, gözleme ek olarak sıranın nasıl yeniden oynatıldığı üzerinde kontrol sahibi olmak istiyordu. Bu kontrol, tek tek istekleri dinamik olarak değiştirme, yeniden sıralama ve hatta iptal etme olanağı da içeriyordu.

4. sürümde bu geri çağırmalar kaldırıldı ve tarayıcı tarafından yeniden oynatma denemesi yapıldığında çağrılan tek bir onSync geri çağırma eklendi. Varsayılan olarak onSync geri çağırma işlevi replayRequests()'u çağırır ancak yeniden oynatma işlemi üzerinde daha fazla kontrole ihtiyacınız varsa yukarıda listelenen dizi benzeri yöntemleri kullanarak sırayı istediğiniz şekilde yeniden oynatabilirsiniz.

Özel yeniden oynatma mantığı örneğini aşağıda bulabilirsiniz:

const queue = new workbox.backgroundSync.Queue('my-queue-name', {
  onSync: async ({queue}) => {
    let entry;
    while ((entry = await this.shiftRequest())) {
      try {
        await fetch(entry.request);
      } catch (error) {
        console.error('Replay failed for request', entry.request, error);
        await this.unshiftRequest(entry);
        return;
      }
    }
    console.log('Replay complete!');
  },
});

Benzer şekilde, workbox.backgroundSync.Plugin sınıfı Queue sınıfıyla aynı bağımsız değişkenleri kabul eder (dahili olarak bir Queue örneği oluşturduğundan), bu nedenle aynı şekilde değiştirilmiştir.

çalışma kutusu-geçerlilik-süresi

npm paketi, diğer modüller için kullanılan adlandırma kuralına uygun şekilde workbox-expiration olarak yeniden adlandırıldı. Bu paket, artık kullanımdan kaldırılmış olan eski workbox-cache-expiration paketiyle işlevsel olarak eşdeğerdir.

workbox-broadcast-update

npm paketi, diğer modüller için kullanılan adlandırma kuralına uygun olarak workbox-broadcast-update olarak yeniden adlandırıldı. Bu paket, kullanımdan kaldırılan eski workbox-broadcast-cache-update paketine işlevsel olarak eşdeğerdir.

çalışma kutusu çekirdek

Workbox v3'te günlük düzeylerinin ayrıntı düzeyi, workbox.core.setLogLevel() yöntemi aracılığıyla kontrol edilebilir. Bu yöntemde, workbox.core.LOG_LEVELS enum'undaki değerlerden birini iletirsiniz. Mevcut günlük düzeyini workbox.core.logLevel aracılığıyla da okuyabilirsiniz.

Modern geliştirici araçlarının tümü artık zengin günlük filtreleme özellikleriyle birlikte gönderildiği için Workbox 4 sürümünde bunların tümü kaldırıldı (Chrome Geliştirici Araçları için konsol çıkışını filtreleme bölümüne bakın).

workbox-sw

Daha önce doğrudan workbox ad alanında (workbox-sw modülüne karşılık gelir) kullanıma sunulan iki yöntem, bunun yerine workbox.core alanına taşındı. workbox.skipWaiting(), workbox.core.skipWaiting() oldu ve benzer şekilde workbox.clientsClaim(), workbox.core.clientsClaim() oldu.

Derleme Aracı Yapılandırması

Workbox-cli, Workbox-build veya workbox-webpack-plugin eklentisine iletilebilecek bazı seçeneklerin adı değişti. Bir seçenek adında "Url" her kullanıldığında, artık "URL"nin yerini alacak şekilde kullanımdan kaldırılmıştır. Bu, aşağıdaki seçenek adlarının tercih edildiği anlamına gelir:

  • dontCacheBustURLsMatching
  • ignoreURLParametersMatching
  • modifyURLPrefix
  • templatedURLs

Bu seçenek adlarının "Url" varyantı, 4. sürümde çalışmaya devam eder ancak uyarı mesajıyla sonuçlanır. Geliştiricilerin, 5. sürümden önce geçiş yapmalarını öneririz.

Yeni İşlevler

çalışma kutusu-penceresi

Yeni workbox-window modülü, hizmet çalışanı kaydetme ve güncellemeleri algılama sürecini basitleştirir ve hizmet çalışanında çalışan kod ile web uygulamanızın window bağlamında çalışan kod arasında standart bir iletişim aracı sağlar.

workbox-window'ü kullanmak isteğe bağlıdır ancak geliştiricilerin bu özelliği faydalı bulacağını ve uygun olduğunda kullanmak için el yazısıyla yazılmış mantıklarının bir kısmını buraya taşımayı düşüneceğini umuyoruz. workbox-window'ü kullanma hakkında daha fazla bilgiyi modülün kılavuzunda bulabilirsiniz.

Örnek Taşıma

Workbox v3'ten v4'e gerçek bir taşıma örneğini bu istekte bulabilirsiniz.

Yardım alma

Taşıma işlemlerinin çoğunun sorunsuz geçeceğini tahmin ediyoruz. Bu kılavuzda yer almayan sorunlarla karşılaşırsanız lütfen GitHub'da sorun kaydı açarak bize bildirin.