בדרך כלל רוצים להגביל את המטמון מבחינת משך הזמן שבו פריטים יכולים להישמר במטמון או מבחינת מספר הפריטים שאפשר לשמור במטמון. 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,
}),
],
})
);
כך Plugin יתווסף למסלול הזה. אחרי שמשתמשים בתגובה שנשמרה במטמון או שמוסיפים בקשה חדשה למטמון, הפלאגין יבדוק את המטמון שהוגדר ויוודא שמספר הרשומות במטמון לא חורג מהמגבלה. אם כן, הרשאות הישנות ביותר יוסרו.
הגבלת הגיל של רשומות ששמורות במטמון
כדי להגביל את משך הזמן שבו בקשה שמורה במטמון, אפשר להגדיר גיל מקסימלי בשניות באמצעות האפשרות 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
.
מאפיינים
-
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, ולכן התהליך עשוי להיות איטי.
הערה: השיטה הזו לא תסיר את הרשומה במטמון. כדי להסיר רשומות מ-indexedDB וממטמון, צריך לבצע קריאה ל-
expireEntries()
.הפונקציה
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()
והעברת שם המטמון אמורה להספיק. במקרה כזה, אין צורך בשיטה ספציפית ל-Workbox לצורך ניקוי.הפונקציה
deleteCacheAndMetadata
נראית כך:() => {...}
-
החזרות
Promise<void>
ExpirationPluginOptions
מאפיינים
-
matchOptions
CacheQueryOptions אופציונלי
-
maxAgeSeconds
מספר אופציונלי
-
maxEntries
מספר אופציונלי
-
purgeOnQuotaError
boolean אופציונלי