הסבר על מכסת האחסון

כל הדפדפנים מציבים גבול עליון על נפח האחסון שמותר למקור של אפליקציית האינטרנט שלך להשתמש בו. ניתן להגדיר את תיבת העבודה כך שינקה באופן אוטומטי את הנתונים שהיא מאחסן במטמון בזמן ריצה, כדי להימנע ממגבלות מכסת האחסון שעשויות להשפיע על יעילות השמירה במטמון ועל האמינות של האתר שלכם.

אילו אפשרויות הגדרה נתמכות?

כשמגדירים אסטרטגיה לשמירה של מסלול ומשך ריצה במטמון, אפשר להוסיף מופע של ExpirationPlugin מתוך workbox-expiration עם הגדרות שהכי מתאימות לסוג הנכסים שרוצים לשמור במטמון.

לדוגמה, התצורה הבאה עשויה לשמש לשמירת תמונות בזמן ריצה, עם מגבלות מפורשות וניקוי אוטומטי במקרה של חריגה מהמכסה:

import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {ExpirationPlugin} from 'workbox-expiration';

registerRoute(
  ({request}) => request.destination === 'image',
  // Use a cache-first strategy with the following config:
  new CacheFirst({
    // You need to provide a cache name when using expiration.
    cacheName: 'images',
    plugins: [
      new ExpirationPlugin({
        // Keep at most 50 entries.
        maxEntries: 50,
        // Don't keep any entries for more than 30 days.
        maxAgeSeconds: 30 * 24 * 60 * 60,
        // Automatically cleanup if quota is exceeded.
        purgeOnQuotaError: true
      })
    ]
  })
);

עליך להגדיר את maxEntries, את maxAgeSeconds או את שתיהן כשמשתמשים בExpirationPlugin. הערך purgeOnQuotaError הוא אופציונלי.

maxEntries

ההגדרה הזו מגבילה את מספר הרשומות (כלומר, כתובות URL ייחודיות) למטמון נתון.

מומלץ להגדיר זאת בדרך כלל, אלא אם אתם יודעים שיש רק מספר קטן של כתובות URL שאפשר לטפל בהן באמצעות אסטרטגיה מסוימת.

maxAgeSeconds

רשומות שנוספו למטמון לפני יותר ממספר זה של שניות ייחשבו למיושנות, ובפעם הבאה שתתבצע גישה למטמון, הן ינוקו.

האפשרות הזו פחות יעילה בניהול מכסת האחסון כמו maxEntries, כי המטמון יכול לגדול באופן שרירותי כל עוד כל הרשומות נוספו בפרק זמן קצר. הדבר שימושי ביותר כשאתה יודע שיש מגבלה עליונה על הרענון שברצונך לכפות, ולשמירה על רשומות ישנות אין ערך רב עבור יישום האינטרנט שלך.

purgeOnQuotaError

בעזרת אפשרות זו, ניתן לסמן מטמון נתון כבטוח למחיקה אוטומטית במקרה שאפליקציית האינטרנט תחרוג מנפח האחסון הזמין.

ברירת המחדל של האפשרות הנוכחית היא false. באופן כללי, מטמון זמן ריצה אמור להיות עמיד בפני מחיקה, לכן כדאי להגדיר את האפשרות הזו לערך true ולוודא שאפליקציית האינטרנט תוכל לשחזר את הנתונים באופן אוטומטי נוכח מגבלות אחסון.

כמה נתונים מותר לאחסן?

לכל דפדפן יש מגבלות עליונות משלו על אחסון, כך שאין תשובה אחת ויחידה. בנוסף, לדפדפנים מסוימים יש מגבלה דינמית שמשתנה בהתאם לנפח האחסון הזמין בחינם במכשיר מסוים, כך שהמגבלה הגבוהה בפועל עשויה להשתנות ללא התראה.

דפדפנים מסוימים חושפים ממשק לשליחת שאילתה לגבי נפח האחסון המקורב שבו משתמשים המקור, יחד עם המגבלה העליונה, דרך navigator.storage.estimate(). במאמר "הערכת נפח האחסון הזמין" מוסבר איך להשתמש בכך באפליקציות האינטרנט שלכם.

שיקולים מיוחדים לגבי גלישה בסתר ב-Chrome

פתיחת אפליקציית אינטרנט במצב פרטי ב-Chrome כוללת מגבלה מיוחדת על האחסון, שאינה חלה על הקשרי גלישה רגילים: יש מגבלת מכסה של כ-100 מגה-בייט, ללא קשר למקום הפנוי במכשיר.

יש להיזהר מתשובות אטומות!

מקור נפוץ לניצול גבוה באופן בלתי צפוי של המכסות נובע משמירה במטמון בזמן ריצה של תגובות אטומות, כלומר תגובות ממקורות שונים לבקשות שלא הופעלו ב-CORS.

דפדפנים מגדילים באופן אוטומטי את השפעת המכסה של תגובות אטומות אלה מטעמי אבטחה. ב-Chrome, למשל, אפילו תגובה אטומה של כמה קילובייט (KB) תתרום בערך 7 מגה-בייט לניצול המכסה שלך.

לאחר שתתחיל לשמור במטמון תשובות אטומות, השיטה המומלצת היא להשתמש ב-ExpirationPlugin עם maxEntries, ואולי אפילו ב-purgeOnQuotaError, עם ההגדרות המתאימות, כך שנפח האחסון ינוצל במהירות רבה יותר מכפי שציפית.