Öğelerin önbellekte ne kadar süreyle saklanmasına izin verileceği veya önbellekte kaç öğenin tutulacağı açısından önbelleğe kısıtlamalar uygulamak oldukça yaygındır. Workbox, önbellekte bulunan girişlerin sayısını sınırlamanıza ve / veya uzun süredir önbelleğe alınmış girişleri kaldırmanıza olanak tanıyan workbox-expiration eklentisi aracılığıyla bu işlevi sağlar.
Önbellek Girişlerinin Sayısı
Bir önbellekte depolanan girişlerin sayısını kısıtlamak için maxEntries seçeneğini aşağıdaki gibi kullanabilirsiniz:
import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {ExpirationPlugin} from 'workbox-expiration';
registerRoute(
  ({request}) => request.destination === 'image',
  new CacheFirst({
    cacheName: 'image-cache',
    plugins: [
      new ExpirationPlugin({
        maxEntries: 20,
      }),
    ],
  })
);
Bu işlemle eklenti bu yola eklenir. Önbelleğe alınmış bir yanıt kullanıldıktan veya önbelleğe yeni bir istek eklendikten sonra, eklenti yapılandırılmış önbelleğe bakar ve önbelleğe alınmış girişlerin sayısının sınırı aşmadığından emin olur. Bu durumda en eski girişler kaldırılır.
Önbelleğe Alınan Girişlerin Yaşını Kısıtlama
Bir isteğin ne kadar süre boyunca önbelleğe alınacağını kısıtlamak için maxAgeSeconds seçeneğini kullanarak saniye cinsinden bir maksimum yaş tanımlayabilirsiniz.
import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {ExpirationPlugin} from 'workbox-expiration';
registerRoute(
  ({request}) => request.destination === 'image',
  new CacheFirst({
    cacheName: 'image-cache',
    plugins: [
      new ExpirationPlugin({
        maxAgeSeconds: 24 * 60 * 60,
      }),
    ],
  })
);
Eklenti, her istek veya önbelleğe alma güncellemesinden sonra girişleri kontrol edip kaldırır.
İleri Seviye Kullanım
Süre sonu mantığını diğer Workbox modüllerinden ayrı olarak kullanmak istiyorsanız bunu CacheExpiration sınıfıyla yapabilirsiniz.
Bir önbelleğe kısıtlama uygulamak için, kontrol etmek istediğiniz önbelleğe aşağıdaki gibi bir CacheExpiration örneği oluşturursunuz:
import {CacheExpiration} from 'workbox-expiration';
const cacheName = 'my-cache';
const expirationManager = new CacheExpiration(cacheName, {
  maxAgeSeconds: 24 * 60 * 60,
  maxEntries: 20,
});
Önbelleğe alınmış bir girişi her güncellediğinizde, yaşını güncellemek için updateTimestamp()
yöntemini çağırmanız gerekir.
await openCache.put(request, response);
await expirationManager.updateTimestamp(request.url);
Ardından, bir giriş grubunun süresinin dolmasını istediğiniz zaman maxAgeSeconds ve maxEntries yapılandırmasını zorunlu kılacak expireEntries() yöntemini çağırabilirsiniz.
await expirationManager.expireEntries();
Türler
CacheExpiration
CacheExpiration sınıfı, Cache içinde depolanan yanıtların sayısı için bir geçerlilik süresi ve / veya sınır belirlemenize olanak tanır.
Özellikler
- 
    oluşturucugeçersiz Yeni bir CacheExpiration örneği oluşturmak için configözelliklerinden en az birini sağlamanız gerekir.constructorişlevi şu şekilde görünür:(cacheName: string, config?: CacheExpirationConfig) => {...} - 
    cacheNamedize Kısıtlamaların uygulanacağı önbelleğin adı. 
- 
    yapılandırmaCacheExpirationConfig isteğe bağlı 
 - 
            returns
 
- 
    
- 
    deletegeçersiz Önbellek geçerlilik bitiş meta verilerini takip etmek için kullanılan IndexedDB nesne deposunu kaldırır. deleteişlevi şu şekilde görünür:() => {...}- 
            returnsPromise<void> 
 
- 
            
- 
    expireEntriesgeçersiz Belirtilen önbellek ve ölçütlere göre girişlerin süresini sonlandırır. expireEntriesişlevi şu şekilde görünür:() => {...}- 
            returnsPromise<void> 
 
- 
            
- 
    isURLExpiredgeçersiz Bir URL'nin geçerlilik süresinin dolup dolmadığını kontrol etmek için kullanılabilir. Bu işlem için IndexedDB'de arama yapılması gerekir. Bu nedenle işlem yavaş olabilir. Not: Bu yöntem, önbelleğe alınan girişi kaldırmaz. indexedDB ve önbellek girişlerini kaldırmak için expireEntries()çağrısı yapın.isURLExpiredişlevi şu şekilde görünür:(url: string) => {...} - 
    urldize 
 - 
            returnsPromise<boolean> 
 
- 
    
- 
    updateTimestampgeçersiz Belirtilen URL'nin zaman damgasını güncelleyin. Bu sayede, maksimum girişe göre girişleri kaldırırken en son kullanılan girişin doğru olduğundan veya süre sonu geldiğinde zaman damgasının güncel olduğundan emin olabilirsiniz. updateTimestampişlevi şu şekilde görünür:(url: string) => {...} - 
    urldize 
 - 
            returnsPromise<void> 
 
- 
    
ExpirationPlugin
Bu eklenti, önbelleğe alınan isteklerin yaşı ve / veya sayısıyla ilgili bir sınırı düzenli olarak uygulamak için workbox-strategy içinde kullanılabilir.
Yalnızca özel cacheName mülk kümesi içeren workbox-strategy örnekleriyle kullanılabilir.
Diğer bir deyişle, varsayılan çalışma zamanı önbelleği adını kullanan stratejideki girişlerin süresinin dolması için kullanılamaz.
Önbelleğe alınmış bir yanıt kullanıldığında veya güncellendiğinde bu eklenti, ilişkili önbelleğe bakar ve eski veya fazla yanıtları kaldırır.
maxAgeSeconds kullanıldığında, yanıtlar geçerlilik süresi dolduktan sonra bir kez kullanılabilir. Bunun nedeni, geçerlilik süresi sonu temizliği, önbelleğe alınan yanıt kullanıldıktan sonra gerçekleşmesidir. Yanıtta "Date" başlığı varsa hafif bir son kullanma tarihi kontrolü yapılır ve yanıt hemen kullanılmaz.
maxEntries kullanıldığında, en son istenen giriş önce önbellekten kaldırılır.
Özellikler
- 
    oluşturucugeçersiz constructorişlevi şu şekilde görünür:(config?: ExpirationPluginOptions) => {...} - 
    yapılandırmaExpirationPluginOptions isteğe bağlı 
 - 
            returns
 
- 
    
- 
    deleteCacheAndMetadatageçersiz Bu, iki işlem gerçekleştiren bir yardımcı yöntemdir: - Sizin adınıza caches.delete() işlevini çağırarak bu eklenti örneğiyle ilişkili temel önbelleğe alma örneklerinin tümünü siler.
- Her önbellek örneğinin geçerlilik bitiş tarihi ayrıntılarını takip etmek için kullanılan meta verileri IndexedDB'den siler.
 Önbelleğin geçerlilik süresinin sona ermesi özelliği kullanılırken bu yöntemin çağrılması, caches.delete()yönteminin doğrudan çağrılmasından daha iyidir. Bu yöntem, IndexedDB meta verilerinin de düzgün bir şekilde kaldırılmasını ve açık IndexedDB örneklerinin silinmesini sağlar.Belirli bir önbelleğe yönelik önbelleğe alma süresini kullanmıyorsanız caches.delete()çağrısını yapıp önbelleğin adını iletmeniz yeterlidir. Bu durumda, temizlik için Workbox'a özel bir yönteme gerek yoktur.deleteCacheAndMetadataişlevi şu şekilde görünür:() => {...}- 
            returnsPromise<void> 
 
ExpirationPluginOptions
Özellikler
- 
    matchOptionsCacheQueryOptions isteğe bağlı 
- 
    maxAgeSecondsnumber isteğe bağlı 
- 
    maxEntriesnumber isteğe bağlı 
- 
    purgeOnQuotaErrorboole isteğe bağlı