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.

أماكن إقامة

  • طريقة وضع التصميم

    غير صالح

    لإنشاء مثيل CacheExpiration جديد، يجب تقديم واحد على الأقل من سمات config.

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

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

    • cacheName

      سلسلة

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

    • config

      CacheExpirationConfig اختياري

  • حذف

    غير صالح

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

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

    () => {...}

    • returns

      Promise<void>

  • expireEntries

    غير صالح

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

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

    () => {...}

    • returns

      Promise<void>

  • isURLExpired

    غير صالح

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

    يتطلب ذلك البحث في IndexedDB، لذا قد يكون بطيئًا.

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

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

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

    • url

      سلسلة

    • returns

      Promise<boolean>

  • updateTimestamp

    غير صالح

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

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

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

    • url

      سلسلة

    • returns

      Promise<void>

ExpirationPlugin

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

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

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

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

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

أماكن إقامة

  • طريقة وضع التصميم

    غير صالح

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

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

  • deleteCacheAndMetadata

    غير صالح

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

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

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

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

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

    () => {...}

    • returns

      Promise<void>

ExpirationPluginOptions

أماكن إقامة

  • matchOptions

    CacheQueryOptions اختياري

  • maxAgeSeconds

    رقم اختياري

  • maxEntries

    رقم اختياري

  • purgeOnQuotaError

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