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

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

  • deleteCacheAndMetadata

    void

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

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

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

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

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

    () => {...}

    • החזרות

      Promise<void>

ExpirationPluginOptions

מאפיינים

  • matchOptions

    CacheQueryOptions אופציונלי

  • maxAgeSeconds

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

  • maxEntries

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

  • purgeOnQuotaError

    boolean אופציונלי