הרבה פעמים קורה שרוצים להחיל הגבלות על מטמון כדי לקבוע כמה זמן רוצים
לשמור פריטים במטמון או כמה פריטים לשמור במטמון. הפונקציה 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);
לאחר מכן, בכל פעם שרוצים שתוקף של קבוצה של רשומות יפוג, אפשר לבצע קריאה ל-method expireEntries()
כדי לאכוף את ההגדרות maxAgeSeconds
ו-maxEntries
.
await expirationManager.expireEntries();
סוגים
CacheExpiration
המחלקה CacheExpiration
מאפשרת להגדיר תפוגה ו / או הגבלה על מספר התשובות שמאוחסנות ב-Cache
.
תכונות
-
Constructor
void
כדי ליצור מכונה חדשה של CacheExpiration, יש לספק לפחות אחד מהמאפיינים
config
.הפונקציה
constructor
נראית כך:(cacheName: string, config?: CacheExpirationConfig) => {...}
-
cacheName
מחרוזת
שם המטמון שעליו יש להחיל את ההגבלות.
-
config
cacheExpirationConfig אופציונלי
-
החזרות
-
-
delete
void
הסרת מאגר האובייקטים IndexedDB המשמש למעקב אחר מטא-נתונים של תפוגת המטמון של המטמון.
הפונקציה
delete
נראית כך:() => {...}
-
החזרות
Promise<void>
-
-
expireEntries
void
רשומות תפוגת תוקף עבור המטמון הנתון והקריטריונים הנתונים.
הפונקציה
expireEntries
נראית כך:() => {...}
-
החזרות
Promise<void>
-
-
isURLExpired
void
אפשר להשתמש בה כדי לבדוק אם פג התוקף של כתובת URL או לא לפני שמשתמשים בה.
פעולה זו מחייבת חיפוש ב-IndexedDB, לכן היא עשויה להיות איטית.
הערה: השיטה הזו לא תסיר את הרשומה שנשמרה במטמון. צריך לקרוא ל-
expireEntries()
כדי להסיר רשומות שנוספו לאינדקסDB ורשומות במטמון.הפונקציה
isURLExpired
נראית כך:(url: string) => {...}
-
כתובת אתר
מחרוזת
-
החזרות
Promise<boolean>
-
-
updateTimestamp
void
מעדכנים את חותמת הזמן של כתובת ה-URL הנתונה. כך אפשר לוודא שכשמסירים רשומות על סמך מספר מקסימלי של רשומות, שהיו בשימוש לאחרונה יהיו מדויקים או כשיפוג התוקף, חותמת הזמן תהיה עדכנית.
הפונקציה
updateTimestamp
נראית כך:(url: string) => {...}
-
כתובת אתר
מחרוזת
-
החזרות
Promise<void>
-
ExpirationPlugin
אפשר להשתמש בפלאגין הזה ב-workbox-strategy
כדי לאכוף באופן קבוע הגבלה על הגיל או על מספר הבקשות שנשמרו במטמון.
אפשר להשתמש בו רק במכונות workbox-strategy
שיש להן הגדרת מאפיין cacheName
מותאם אישית.
במילים אחרות, אי אפשר להשתמש בו כדי לבטל רשומות בשיטה שמשתמשת בשם המטמון של זמן הריצה שמוגדר כברירת מחדל.
בכל פעם שנעשה שימוש או עדכון בתגובה שנשמרה במטמון, הפלאגין הזה יבדוק את המטמון המשויך ויסיר תגובות ישנות או מיותרות.
כשמשתמשים ב-maxAgeSeconds
, אפשר להשתמש בתשובות פעם אחת אחרי שהתוקף שלהן פג, כי ניקוי התפוגה לא יתבצע עד אחרי השימוש בתגובה שנשמרה במטמון. אם התשובה מכילה את הכותרת "Date", מתבצעת בדיקת תפוגה פשוטה של משקל ולא ייעשה שימוש מיידי בתגובה.
כשמשתמשים ב-maxEntries
, הרשומה הכי פחות מבוקשת תוסר קודם מהמטמון.
תכונות
-
Constructor
void
הפונקציה
constructor
נראית כך:(config?: ExpirationPluginOptions) => {...}
-
config
ExpirationPluginOptions אופציונלי
-
החזרות
-
-
deleteCacheAndMetadata
void
זוהי שיטת עזר שמבצעת שתי פעולות:
- מחיקת כל מכונות המטמון הבסיסיות שמשויכות למכונת הפלאגין הזו, על ידי קריאה ל-caches.delete() בשמכם.
- מוחק את המטא-נתונים מ-IndexedDB, המשמשים למעקב אחר פרטי התפוגה של כל מכונה של מטמון.
כשמשתמשים בתפוגת המטמון, עדיף להפעיל את השיטה הזו על ידי קריאה ישירה ל-
caches.delete()
, כי כך אפשר לוודא שגם המטא-נתונים של IndexedDB יוסרו בצורה נקייה ומכונות פתיחה של IndexedDB יימחקו.שימו לב: במקרה שלא משתמשים בזמן התפוגה של המטמון בשביל מטמון נתון, מספיק לקרוא ל-
caches.delete()
ולהעביר את שם המטמון. במקרה כזה, לא נדרשת שיטה ספציפית לתיבת עבודה לצורך ניקוי.הפונקציה
deleteCacheAndMetadata
נראית כך:() => {...}
-
החזרות
Promise<void>
ExpirationPluginOptions
תכונות
-
matchOptions
CacheQueryOptions אופציונלי
-
maxAgeSeconds
מספר אופציונלי
-
maxEntries
מספר אופציונלי
-
purgeOnQuotaError
בוליאני אופציונלי