من الشائع إلى حدٍ ما فرض قيود على ذاكرة التخزين المؤقت من حيث المدة التي يجب أن تسمح فيها بحفظ العناصر في ذاكرة التخزين المؤقت أو عدد العناصر التي يجب الاحتفاظ بها في ذاكرة التخزين المؤقت. توفّر 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 اختياري
-
returns
-
-
حذف
غير صالح
تزيل هذه السمة مخزن كائنات 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) => {...}
-
config
ExpirationPluginOptions اختياري
-
returns
-
-
deleteCacheAndMetadata
غير صالح
هذه طريقة مساعدة تُجري عمليتين:
- تؤدي هذه الوظيفة إلى حذف جميع مثيلات ذاكرة التخزين المؤقت الأساسية المرتبطة بهذه الإضافة ، وذلك من خلال استدعاء caches.delete() نيابةً عنك.
- تؤدي هذه العملية إلى حذف البيانات الوصفية من IndexedDB المستخدَمة لتتبُّع تفاصيل انتهاء الصلاحية لكل مثيل من ذاكرة التخزين المؤقت.
عند استخدام انتهاء صلاحية ذاكرة التخزين المؤقت، يُفضّل استدعاء هذه الطريقة بدلاً من استدعاء
caches.delete()
مباشرةً، لأنّ ذلك سيضمن إزالة البيانات الوصفية لـ IndexedDB بطريقة نظيفة وحذف نُسخ IndexedDB المفتوحة.يُرجى العلم أنّه في حال عدم استخدام انتهاء صلاحية ذاكرة التخزين المؤقت لذاكرة تخزين مؤقت معيّنة، من المفترض أن يكون استدعاء
caches.delete()
وضبط اسم ذاكرة التخزين المؤقت كافيًا. في هذه الحالة، لا حاجة إلى طريقة خاصة بخدمة Workbox لإجراء عملية التنظيف.تبدو الدالة
deleteCacheAndMetadata
على النحو التالي:() => {...}
-
returns
Promise<void>
ExpirationPluginOptions
أماكن إقامة
-
matchOptions
CacheQueryOptions اختياري
-
maxAgeSeconds
رقم اختياري
-
maxEntries
رقم اختياري
-
purgeOnQuotaError
منطقي اختياري