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