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