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

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

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

בדרך כלל, כשנגמר נפח האחסון במכשיר של המשתמש, הנתונים שאוחסנו באמצעות ממשקי API כמו IndexedDB או localStorage הולכים לאיבוד, בלי שהמשתמש יכול להתערב. כדי להגדיר אחסון מתמיד אפשר להפעיל את ה-method 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

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

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

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

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

כדי להבטיח שקטגוריית האחסון תישאר, אפשר להעביר את הארגומנטים של האפשרויות durability ו-persisted ל-method 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, ממשק 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);
});

ניפוי באגים בקטגוריות אחסון בכלי פיתוח

בודקים את קטגוריות האחסון בעץ ייעודי בקטע Application > Storage.

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

מקורות מידע שימושיים