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