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

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

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

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

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

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

Storage Buckets 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 מספק ל-browser רמז שעוזר לו לשפר את ביצועי הכתיבה ולהפחית את הסיכון לאובדן נתונים במקרה של הפסקות חשמל. הערכים המותרים הם '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, הממשק Cache או הממשק File. ממשקי ה-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);
});

ניפוי באגים בקטגוריות אחסון ב-DevTools

אפשר לבדוק את הקטגוריות של האחסון בעץ ייעודי בקטע Application (אפליקציה) > Storage (אחסון).

הפעולות לפני ואחרי הפעלת העץ של קטגוריות האחסון בקטע 'אחסון'.

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