Workspace-expiration-expiration (انتهاء صلاحية صندوق العمل)

من الشائع جدًا أن تريد وضع قيود على ذاكرة التخزين المؤقت من حيث المدة التي يجب خلالها السماح بتخزين العناصر في ذاكرة التخزين المؤقت أو عدد العناصر التي يجب الاحتفاظ بها في ذاكرة التخزين المؤقت. يوفّر Workbox هذه الوظيفة من خلال المكوّن الإضافي workbox-expiration الذي يتيح لك الحدّ من عدد الإدخالات في ذاكرة التخزين المؤقت و / أو إزالة الإدخالات التي تم تخزينها مؤقتًا لفترة زمنية طويلة.

تقييد عدد إدخالات ذاكرة التخزين المؤقت

لفرض قيود على عدد الإدخالات المخزّنة في ذاكرة التخزين المؤقت، يمكنك استخدام الخيار maxEntries على النحو التالي:

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,
      }),
    ],
  })
);

من خلال ذلك، ستتم إضافة المكوّن الإضافي إلى هذا المسار. بعد استخدام استجابة مخزّنة مؤقتًا أو إضافة طلب جديد إلى ذاكرة التخزين المؤقت، سيفحص المكوّن الإضافي ذاكرة التخزين المؤقت التي تم إعدادها ويضمن أن عدد الإدخالات المخزنة مؤقتًا لا يتجاوز الحد الأقصى. وإذا حدث ذلك، ستتم إزالة الإدخالات الأقدم.

تقييد عمر الإدخالات المخزّنة مؤقتًا

لفرض قيود على مدة التخزين المؤقت للطلب، يمكنك تحديد الحدّ الأقصى للعمر بالثواني باستخدام خيار maxAgeSeconds على النحو التالي:

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,
      }),
    ],
  })
);

سيتحقق المكون الإضافي من الإدخالات ويزيلها بعد كل طلب أو تحديث لذاكرة التخزين المؤقت.

الاستخدام المتقدّم

إذا كنت تريد استخدام منطق انتهاء الصلاحية بشكل منفصل عن أي وحدة Workbox أخرى، يمكنك إجراء ذلك باستخدام الفئة CacheExpiration.

لتطبيق قيود على ذاكرة تخزين مؤقت، يمكنك إنشاء مثيل لـ CacheExpiration لذاكرة التخزين المؤقت التي تريد التحكم فيها على النحو التالي:

import {CacheExpiration} from 'workbox-expiration';

const cacheName = 'my-cache';
const expirationManager = new CacheExpiration(cacheName, {
  maxAgeSeconds: 24 * 60 * 60,
  maxEntries: 20,
});

كلما عدَّلت إدخالاً مخزَّنًا مؤقتًا، عليك استدعاء الطريقة updateTimestamp() حتى يتم تعديل عمره.

await openCache.put(request, response);

await expirationManager.updateTimestamp(request.url);

وبعد ذلك، عندما تريد انتهاء صلاحية مجموعة من الإدخالات، يمكنك استدعاء طريقة expireEntries() التي ستفرض إعدادات maxAgeSeconds وmaxEntries.

await expirationManager.expireEntries();

الأنواع

CacheExpiration

تتيح لك الفئة CacheExpiration تحديد تاريخ انتهاء صلاحية و / أو تحديد عدد الردود المخزّنة في Cache.

أماكن إقامة

  • الدالة الإنشائية

    void

    لإنشاء مثيل جديد لانتهاء صلاحية ذاكرة التخزين المؤقت، يجب توفير خاصية واحدة على الأقل من خصائص config.

    تبدو الدالة constructor على النحو التالي:

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

    • cacheName

      سلسلة

      اسم ذاكرة التخزين المؤقت التي تريد تطبيق القيود عليها

    • config

      CacheExpirationConfig اختياري

  • حذف

    void

    إزالة مخزن عناصر IndexedDB المستخدَم لتتبُّع البيانات الوصفية لانتهاء صلاحية ذاكرة التخزين المؤقت

    تبدو الدالة delete على النحو التالي:

    () => {...}

    • returns

      Promise<void>

  • expireEntries

    void

    تنتهي صلاحية الإدخالات في ذاكرة التخزين المؤقت المحددة والمعايير المحددة.

    تبدو الدالة expireEntries على النحو التالي:

    () => {...}

    • returns

      Promise<void>

  • isURLExpired

    void

    يمكن استخدامها للتحقق مما إذا كانت صلاحية عنوان URL قد انتهت قبل استخدامه.

    يتطلب هذا البحث من IndexedDB، لذا يمكن أن يكون بطيئًا.

    ملاحظة: لن تؤدي هذه الطريقة إلى إزالة الإدخال المخزّن مؤقتًا، ويمكنك استدعاء expireEntries() لإزالة إدخالات قاعدة البيانات المفهرسة وإدخالات ذاكرة التخزين المؤقت.

    تبدو الدالة isURLExpired على النحو التالي:

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

    • url

      سلسلة

    • returns

      Promise<boolean>

  • updateTimestamp

    void

    عدِّل الطابع الزمني لعنوان URL المحدّد. ويضمن ذلك أن تكون عمليات إزالة الإدخالات استنادًا إلى الحد الأقصى للإدخالات، التي تم استخدامها مؤخرًا، دقيقة أو أنّ الطابع الزمني محدّث عند انتهاء صلاحيتها.

    تبدو الدالة updateTimestamp على النحو التالي:

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

    • url

      سلسلة

    • returns

      Promise<void>

ExpirationPlugin

ويمكن استخدام هذا المكوّن الإضافي في workbox-strategy لفرض حدّ على العمر و / أو عدد الطلبات المخزّنة مؤقتًا بشكل منتظم.

لا يمكن استخدام هذه السمة إلا مع مثيلات workbox-strategy التي تتضمّن مجموعة cacheName مخصّصة. بمعنى آخر، لا يمكن استخدامها لإنهاء صلاحية الإدخالات في الاستراتيجية التي تستخدم اسم ذاكرة التخزين المؤقت التلقائي لوقت التشغيل.

عند استخدام استجابة مخزَّنة مؤقتًا أو تحديثها، سيفحص هذا المكون الإضافي ذاكرة التخزين المؤقت المرتبطة ويزيل أي ردود قديمة أو إضافية.

عند استخدام maxAgeSeconds، يمكن استخدام الردود مرة واحدة بعد انتهاء الصلاحية لأن انتهاء الصلاحية لن تتم إلا بعد استخدام الاستجابة المخزّنة مؤقتًا. إذا كانت الاستجابة تحتوي على عنوان "التاريخ"، يتم إجراء فحص انتهاء الصلاحية البسيط ولن يتم استخدام الاستجابة على الفور.

عند استخدام maxEntries، ستتم إزالة أقل إدخال تم طلبه مؤخرًا من ذاكرة التخزين المؤقت أولاً.

أماكن إقامة

  • الدالة الإنشائية

    void

    تبدو الدالة constructor على النحو التالي:

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

  • deleteCacheAndMetadata

    void

    هذه طريقة مساعدة تؤدي عمليتين:

    • يحذف جميع مثيلات ذاكرة التخزين المؤقت الأساسية المرتبطة بمثيل المكوّن الإضافي هذا، من خلال استدعاء caches.delete() بالنيابة عنك.
    • لحذف البيانات الوصفية من قاعدة البيانات المفهرسة المستخدمة لتتبُّع تفاصيل انتهاء الصلاحية لكل مثيل من مثيلات ذاكرة التخزين المؤقت.

    عند استخدام تاريخ انتهاء صلاحية ذاكرة التخزين المؤقت، يُفضّل استدعاء هذه الطريقة على استدعاء caches.delete() مباشرةً، لأنّ ذلك سيضمن إزالة البيانات الوصفية لقاعدة البيانات المفهرَسة أيضًا بالكامل وحذف مثيلات IndexedDB.

    يُرجى العلم أنّه في حال لم تكن تستخدم تاريخ انتهاء صلاحية ذاكرة التخزين المؤقت لذاكرة تخزين مؤقت معيّنة، من المفترض أن يكون استدعاء caches.delete() وتمرير اسمها كافيًا. وفي هذه الحالة، لا يلزم استخدام طريقة خاصة بـ Workbox للتنظيف.

    تبدو الدالة deleteCacheAndMetadata على النحو التالي:

    () => {...}

    • returns

      Promise<void>

ExpirationPluginOptions

أماكن إقامة

  • matchOptions

    CacheQueryOptions اختياري

  • maxAgeSeconds

    الرقم اختياري

  • maxEntries

    الرقم اختياري

  • purgeOnQuotaError

    منطقية اختيارية