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

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 (אחסון).

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

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