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