לא כל נפח האחסון נוצר שווה: הצגת קטגוריות אחסון

ב-Storage Standard מוגדר API עבור אומדנים של אחסון מתמיד ומכסות, ואת ארכיטקטורת האחסון של הפלטפורמה. אנחנו משיקים ממשק API שמאפשר לחזות את הפינוי המתמיד של האחסון המתמיד עקב לחץ זיכרון כבד. זמין החל מ-Chromium 122.

איזו בעיה פותרת תקן האחסון?

בדרך כלל, כשנגמר נפח האחסון במכשיר של המשתמש, הנתונים שמאוחסנים בממשקי API כמו IndexedDB או localStorage אובדים בלי שהמשתמש יכול להתערב. דרך להפוך את האחסון לקבוע היא להפעיל את השיטה persist() בממשק של StorageManager. היא בו-זמנית מבקשת הרשאה ממשתמש הקצה, ומשנה את האחסון לשמירה על בסיס קבוע לאחר מתן ההרשאה:

const persisted = await navigator.storage.persist();
if (persisted) {
  /* Storage will not be cleared except by explicit user action. */
}

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

ממשק ה-API של קטגוריות אחסון

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

דוגמה לתרחיש לדוגמה

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

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

שימוש ב-Storage Buckets API

יצירה של קטגוריית אחסון חדשה

יש אפשרות ליצור קטגוריית אחסון חדשה באמצעות השיטה open() בממשק StorageBucketManager.

// Create a storage bucket for emails that are synchronized with the
// server.
const inboxBucket = await navigator.storageBuckets.open('inbox');

יצירה של קטגוריית אחסון קבועה חדשה

כדי לוודא שקטגוריית האחסון נשארת, אפשר להעביר ארגומנטים של אפשרויות durability ו-persisted לשיטה open():

  • persisted קובעת אם קטגוריית האחסון תישמר או לא. הערכים המותרים הם false (ברירת המחדל) או true.
  • durability מספק רמז לדפדפן, שעוזר לו להחליף את ביצועי הכתיבה מול סיכון מופחת לאובדן נתונים במקרה של כשלי חשמל. הערכים המותרים הם 'relaxed' (ברירת המחדל) או 'strict':

    • קטגוריות של 'strict' מנסות לצמצם את הסיכון לאובדן נתונים עקב כשל בחשמל. מצב כזה עשוי לנבוע מביצועים מופחתים, כלומר שהשלמת הכתיבה עלולה להימשך זמן רב יותר, היא עלולה להשפיע על הביצועים הכוללים של המערכת, לצרוך יותר חשמל מהסוללה ולהשחיקה מהר יותר את המכשיר.
    • קטגוריות של 'relaxed' עשויות "לשכוח" כתיבה שהושלמה בשניות האחרונות, כשמתרחש אובדן חשמל. בתמורה, כתיבת נתונים לקטגוריות האלה עשויה לספק מאפייני ביצועים טובים יותר, והיא עשויה להאריך את חיי הסוללה ולהאריך את משך החיים של מכשיר האחסון. כמו כן, תקלה בחשמל לא תוביל לפגיעה בנתונים בשיעור גבוה יותר מזה של קטגוריות 'strict'.
// Create a storage bucket for email drafts that only exist on the client.
const draftsBucket = await navigator.storageBuckets.open('drafts', {
  durability: 'strict', // Or `'relaxed'`.
  persisted: true, // Or `false`.
});

גישה לממשקי ה-API של האחסון מקטגוריית אחסון

כל קטגוריית אחסון משויכת לממשקי API של אחסון, לדוגמה IndexedDB, ממשק המטמון או הממשק קובץ. ממשקי ה-API לאחסון האלה פועלים כרגיל, רק שנקודת הכניסה היא מהממשק של StorageBucket, לדוגמה, StorageBucket.indexedDB.

const inboxDb = await new Promise(resolve => {
  const request = inboxBucket.indexedDB.open('messages');
  request.onupgradeneeded = () => { /* migration code */ };
  request.onsuccess = () => resolve(request.result);
  request.onerror = () => reject(request.error);
});

משאבים שימושיים