תיבת עבודה-תוקף

הרבה פעמים קורה שרוצים להחיל הגבלות על מטמון כדי לקבוע כמה זמן רוצים לשמור פריטים במטמון או כמה פריטים לשמור במטמון. הפונקציה 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) => {...}

  • deleteCacheAndMetadata

    void

    זוהי שיטת עזר שמבצעת שתי פעולות:

    • מחיקת כל מכונות המטמון הבסיסיות שמשויכות למכונת הפלאגין הזו, על ידי קריאה ל-caches.delete() בשמכם.
    • מוחק את המטא-נתונים מ-IndexedDB, המשמשים למעקב אחר פרטי התפוגה של כל מכונה של מטמון.

    כשמשתמשים בתפוגת המטמון, עדיף להפעיל את השיטה הזו על ידי קריאה ישירה ל-caches.delete(), כי כך אפשר לוודא שגם המטא-נתונים של IndexedDB יוסרו בצורה נקייה ומכונות פתיחה של IndexedDB יימחקו.

    שימו לב: במקרה שלא משתמשים בזמן התפוגה של המטמון בשביל מטמון נתון, מספיק לקרוא ל-caches.delete() ולהעביר את שם המטמון. במקרה כזה, לא נדרשת שיטה ספציפית לתיבת עבודה לצורך ניקוי.

    הפונקציה deleteCacheAndMetadata נראית כך:

    () => {...}

    • החזרות

      Promise<void>

ExpirationPluginOptions

תכונות

  • matchOptions

    CacheQueryOptions אופציונלי

  • maxAgeSeconds

    מספר אופציונלי

  • maxEntries

    מספר אופציונלי

  • purgeOnQuotaError

    בוליאני אופציונלי