çalışma kutusu-geçerlilik bitiş tarihi

Öğ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şturucu

    geçersiz

    Yeni bir CacheExpiration örneği oluşturmak için config özelliklerinden en az birini sağlamanız gerekir.

    constructor işlevi şu şekilde görünür:

    (cacheName: string, config?: CacheExpirationConfig) => {...}

    • cacheName

      dize

      Kısıtlamaların uygulanacağı önbelleğin adı.

    • yapılandırma

      CacheExpirationConfig isteğe bağlı

  • delete

    geçersiz

    Önbellek geçerlilik bitiş meta verilerini takip etmek için kullanılan IndexedDB nesne deposunu kaldırır.

    delete işlevi şu şekilde görünür:

    () => {...}

    • returns

      Promise<void>

  • expireEntries

    geçersiz

    Belirtilen önbellek ve ölçütlere göre girişlerin süresini sonlandırır.

    expireEntries işlevi şu şekilde görünür:

    () => {...}

    • returns

      Promise<void>

  • isURLExpired

    geç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.

    isURLExpired işlevi şu şekilde görünür:

    (url: string) => {...}

    • url

      dize

    • returns

      Promise<boolean>

  • updateTimestamp

    geç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.

    updateTimestamp işlevi şu şekilde görünür:

    (url: string) => {...}

    • url

      dize

    • returns

      Promise<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şturucu

    geçersiz

    constructor işlevi şu şekilde görünür:

    (config?: ExpirationPluginOptions) => {...}

  • deleteCacheAndMetadata

    geç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.

    deleteCacheAndMetadata işlevi şu şekilde görünür:

    () => {...}

    • returns

      Promise<void>

ExpirationPluginOptions

Özellikler

  • matchOptions

    CacheQueryOptions isteğe bağlı

  • maxAgeSeconds

    number isteğe bağlı

  • maxEntries

    number isteğe bağlı

  • purgeOnQuotaError

    boole isteğe bağlı