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

ב-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. */
}

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

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 ארגומנטים לשיטה 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);
});

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

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

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

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