ניהול אחסון לא מקוון של HTML5

HTML5 כולל ממשקי API רבים של אחסון שמאפשרים לאחסן כמות גדולה של נתונים באופן מקומי בדפדפנים של המשתמשים. אבל כמות השטח שמוקצית לכל אפליקציה מוגבלת כברירת מחדל לכמה מגה-בייט. ב-Google Chrome תוכלו לבקש מכסת אחסון גדולה יותר, מעבר למגבלה הקודמת של 5MB בלבד.

מסמך זה מתאר את המושגים הבסיסיים בנוגע לסוגי האחסון שבשימוש ב-Chrome, ומתאר את ממשק ה-API הניסיוני לניהול מכסות, שמאפשר לנהל את מכסת האחסון. במסמך הזה אנחנו מניחים שאתם כבר מכירים את המושגים הכלליים של אחסון בצד הלקוח ויודעים איך להשתמש בממשקי API אופליין.

תוכן עניינים

  1. סוגי האחסון
    1. זמני
    2. עקבי
    3. ללא הגבלה
    4. השוואה בין סוגי אחסון
  2. ניהול המכסות
    1. נתוני שימוש וזמינות של אחסון שאילתות
    2. איך מבקשים עוד נפח אחסון
    3. איפוס המכסה לבדיקה
  3. הפניית API
    1. קבועים
    2. סקירה כללית של השיטה
    3. שיטות
  4. פיתוח עתידי

סוגי אחסון

ב-Google Chrome, ניתן לבקש שלושה סוגי אחסון:

בסעיפים הבאים מתוארים סוגי האחסון האלה בפירוט רב יותר, והשוואה ביניהם בטבלה שבהמשך.

אחסון זמני

אחסון זמני הוא אחסון זמני שזמין לכל אפליקציית אינטרנט, כך שלא צריך לבקש הקצאה באופן אוטומטי.

שיתוף הבריכה

האחסון הזמני משותף לכל אפליקציות האינטרנט שפועלות בדפדפן. המאגר המשותף יכול להכיל עד 1/3 מנפח האחסון הזמין. נפח האחסון שכבר משתמש באפליקציות נכלל בחישוב של המאגר המשותף. כלומר, החישוב מבוסס על (available storage space + storage being used by apps) * .333 .

לכל אפליקציה יכולים להיות עד 20% מהמאגר המשותף. לדוגמה, אם נפח האחסון הכולל הזמין הוא 60GB, המאגר המשותף הוא 20GB ונפח האחסון של האפליקציה יכול להיות עד 4GB. הערך הזה מחושב מ-20% (עד 4GB) מתוך 1/3 (עד 20GB) משטח האחסון הזמין (60GB).

מבקש עוד מקום

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

נפח האחסון עומד להיגמר

אם יש חריגה ממכסת האחסון של המאגר כולו, נמחקים כל הנתונים שמאוחסנים במארח האחרון שהשתמשתם בו הכי פחות. עם זאת, הדפדפן לא ימחק את הנתונים ב-LocalStorage וב-SessionStorage. בנתונים שמאוחסנים בממשקי API לא מקוונים אחרים, הדפדפן מוחק את הנתונים במלואם ולא בחלקם כדי שנתוני האפליקציה לא ייפגמו בדרכים בלתי צפויות.

מכיוון שכל אפליקציה מוגבלת ל-20% ממאגר האחסון, סביר להניח שהמחיקה תתבצע רק אם המשתמש מפעיל באופן פעיל יותר מ-5 אפליקציות אופליין שכל אחת מהן משתמשת בנפח האחסון המקסימלי.

עם זאת, נפח האחסון הזמין יכול להצטמצם כשמשתמשים מוסיפים קבצים לכוננים הקשיחים שלהם. כשנפח האחסון הזמין מתמלא (חשוב לזכור שהמאגר המשותף מקבל רק מחצית מנפח הדיסק הזמין הנוכחי), הדפדפן מוחק את כל הנתונים שאוחסנו אצל המארח הכי פחות בשימוש.

אחסון קבוע

אחסון קבוע הוא אחסון שנשאר בדפדפן, אלא אם המשתמש מסיר אותו באופן סופי. הוא זמין רק לאפליקציות שמשתמשות ב-File System API, אבל בסופו של דבר יהיה זמין לממשקי API לא מקוונים אחרים כמו IndexedDB ו-Application Cache.

לאפליקציה יכולה להיות מכסה גדולה יותר לאחסון קבוע מאשר לאחסון זמני, אבל תצטרכו לבקש אחסון באמצעות Quota Management API והמשתמש חייב להעניק לכם הרשאה להשתמש ביותר מקום. Chrome מציג סרגל מידע שמבקש מהמשתמש להעניק לאפליקציה שטח אחסון מקומי נוסף.

אחסון ללא הגבלה

האחסון ללא הגבלה דומה לאחסון הקבוע, אבל הוא זמין רק לאפליקציות ולתוספים של Chrome (קובצי .crx). הגודל של האחסון הבלתי מוגבל מוגבל רק על ידי זמינות המקום בכונן הקשיח של המשתמש. אפשר לבקש את ההרשאה unlimitedStorage בקובץ המניפסט של אפליקציה או תוסף. במהלך ההתקנה, המשתמשים מקבלים מידע על ההרשאות הנדרשות לאפליקציה או לתוסף. בהתקנה, המשתמש מעניק באופן לא מפורש הרשאה לכל הדפים שכתובות ה-URL שלהם רשומות בקובץ Manifest.json.

כדי לקבל מידע נוסף, אפשר לעיין במדריכים למפתחים בנושא אפליקציות ותוספים.

השוואה בין סוגי אחסון

בטבלה הבאה מפורטים ההבדלים בין שלושת סוגי האחסון.

 אחסון זמניאחסון קבועאחסון ללא הגבלה
תיאור בסיסי

אחסון זמני שזמין לכל אפליקציית אינטרנט.

העדכון הוא אוטומטי ואין צורך להגיש בקשה.

אחסון קבוע שצריך לבקש דרך Quota Management API ולהעניק למשתמשים.

אחסון קבוע לתוספים ולאפליקציות ל-Chrome.

היא מוגדרת בקובץ המניפסט והמשתמשים צריכים לאשר אותה.

זמינות

כל אפליקציות האינטרנט.

כל אפליקציות האינטרנט.הם ייחודיים לתוספים ל-Chrome ולאפליקציות אינטרנט מתארחים ומותקנים.
הרשאהללא. אפשר להשתמש בו בלי לבקש אותו במפורש.

צריך לבקש נפח אחסון נוסף באמצעות Quota Management API.

אפשר לבקש את ההרשאה unlimitedStorage בקובץ המניפסט של האפליקציה או התוסף.
חוויית המשתמש בשימוש הראשוןמוסתר למשתמש. האפליקציה רק פועלת.

ב-Chrome מוצג סרגל מידע שמבקש מהמשתמש לאשר או לדחות את בקשת האחסון.

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

במהלך ההתקנה, המשתמשים מקבלים מידע על ההרשאות הנדרשות לאפליקציה או לתוסף. בהתקנה, המשתמש מעניק באופן לא מפורש הרשאה לכל הדפים שכתובות ה-URL שלהם רשומות בקובץ Manifest.json עבור אפליקציה או תוסף.

חוויית המשתמש בבקשות הבאות להגדלת נפח האחסוןלא רלוונטי. אי אפשר לבקש עוד נפח אחסון זמני.

Chrome מציג למשתמש שוב בקשה.

 

Chrome לא מציג למשתמש בקשה לאחר ההתקנה, גם אם האפליקציה או התוסף ביקשו להגדיל את המכסות.
עקביות של נתונים

ארעי. הדפדפן יכול למחוק את הנתונים.

קבוע. הדפדפן לא מוחק את הנתונים אלא אם המשתמש מורה לעשות זאת. הנתונים זמינים בכניסות הבאות.

אל תניח שהנתונים הם קבועים, כי המשתמש יכול למחוק אותם.

זהה לאחסון קבוע.

 

נפח האחסון שמוגדר כברירת מחדל

עד 20% מהמאגר המשותף.

0 MB. אתם צריכים לבקש נפח אחסון ספציפי באופן מפורש.

0 MB. צריך לבקש במפורש את unlimitedStorage בקובץ המניפסט.

אם לא תציינו את דרישות האחסון, Chrome יקצה לאפליקציה נפח אחסון ממאגר האחסון הזמני המשותף.

נפח אחסון מקסימליעד 20% מהמאגר המשותף.בגודל של המקום הפנוי בכונן הקשיח. אין לו מאגר קבוע של נפח אחסון.בגודל של המקום הפנוי בכונן הקשיח.
תרחיש לדוגמה מומלץמתבצעת שמירה במטמון.אפליקציות שפועלות אופליין או שיש להן מספר גדול של נכסים.אפליקציות שנועדו לפעול ב-Google Chrome.
ממשקי API שיכולים להשתמש בו

ממשקי API אופליין

  • מטמון האפליקציה
  • מערכת קבצים
  • IndexedDB
  • WebSQL (הוצא משימוש מאז 18 בנובמבר 2010)

הערה: ממשקי API לאחסון באינטרנט כמו LocalStorage ו-SessionStorage נשארים קבועים בנפח של 5MB.

ממשק API למערכת קבצים

ממשקי API אופליין

  • מטמון האפליקציה
  • מערכת קבצים
  • IndexedDB
  • WebSQL (הוצא משימוש)

הערה: ממשקי API לאחסון באינטרנט כמו LocalStorage ו-SessionStorage נשארים קבועים בנפח של 5MB.

ניהול המכסות

באמצעות Quota Management API, שהשקנו ב-Chrome 13, אפשר לבצע את הפעולות הבאות:

ה-API מוטמע עם האובייקט הגלובלי window.webkitStorageInfo.

לעיון במסמכי התיעוד, ניתן לעיין בקטע הבא.

שליחת שאילתה לגבי שימוש באחסון וזמינות

כדי לבדוק מה גודל האחסון שנמצא בשימוש ואיזה מקום פנוי נותר למארח, צריך לבצע קריאה ל-queryUsageAndQuota() באמצעות הפקודה הבאה:

  • סוג האחסון שרוצים לבדוק
  • השיחה החוזרת בוצעה בהצלחה

יכול להיות שהשימוש שמדווח על ידי ה-API לא יתאים לגודל בפועל של נתוני המשתמש, כי יכול להיות שיידרשו כמה בייטים נוספים לכל אחסון כדי לאחסן את המטא-נתונים שלו. בנוסף, יכול להיות עיכוב בעדכוני הסטטוס, ולכן ה-API לא ישקף את סטטוס האחסון העדכני ביותר.

קטע הקוד הבא מראה איך אפשר לשאול על שטח אחסון:

// Request storage usage and capacity left
// Choose either Temporary or Persistent
navigator.webkitTemporaryStorage.queryUsageAndQuota (
    function(usedBytes, grantedBytes) {
        console.log('we are using ', usedBytes, ' of ', grantedBytes, 'bytes');
    },
    function(e) { console.log('Error', e);  }
);

אם אתם רוצים לבדוק את הסטטוס של האחסון הקבוע, מחליפים את webkitStorageInfo.TEMPORARY ב-webkitStorageInfo.PERSISTENT. ה-enum נמצא גם באובייקט window (מרחב שמות גלובלי), כך שאפשר להשתמש גם ב-window.PERSISTENT וב-window.TEMPORARY.

מבקשים נפח אחסון נוסף

לא צריך לבקש נפח אחסון זמני נוסף כי ההקצאה מתבצעת באופן אוטומטי, ואי אפשר לחרוג מהמגבלה המקסימלית (כפי שמתואר בטבלה).

באחסון קבוע ל-File System API, מכסת ברירת המחדל היא 0 ולכן עליכם לבקש באופן מפורש אחסון לאפליקציה שלכם. אפשר להתקשר אל requestQuota() באמצעות הפרטים הבאים:

  • סוג האחסון
  • גודל
  • השיחה החוזרת בוצעה בהצלחה

בהתאם למה שתבקשו, יקרו הדברים הבאים:

  • אם תבקשו מכסה גדולה יותר, יוצג למשתמש סרגל מידע ותתבקשו לבחור אם לאשר או לדחות את הבקשה להגדלת המכסה. במקרים מסוימים, יכול להיות שהבקשה תידחה בשקט ותוחזר המכסה הנוכחית או של מכסה קטנה יותר.
  • אם סכום המכסה שביקשתם נמוך מההקצאה הנוכחית של האפליקציה, לא תוצג בקשה.
  • אם תבקשו נפח אחסון גדול מהמותר, תופיע הודעת שגיאה (QUOTA_EXCEEDED_ERR).
  • אם מתקשרים שוב אל requestQuota() אחרי שהמשתמש כבר העניק הרשאה, לא קורה דבר. אז אל תטרחו לקרוא שוב את השיטה.

כך אפשר לבקש עוד נפח אחסון:

// Request Quota (only for File System API)
var requestedBytes = 1024*1024*10; // 10MB

navigator.webkitPersistentStorage.requestQuota (
    requestedBytes, function(grantedBytes) {
        window.requestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler);

    }, function(e) { console.log('Error', e); }
);
});

איפוס המכסה לבדיקה

כשבודקים את נפח האחסון באפליקציה, כדאי למחוק את הנתונים המאוחסנים כדי לבדוק מחדש את ניהול המכסות באפליקציה:

  1. מזינים chrome://settings/cookies בסרגל הכתובות.
  2. מחפשים את האפליקציה.
  3. בוחרים את האפליקציה הרצויה.
  4. לוחצים על ה-X משמאל לבחירה המודגשת.

הפניית API

בסעיף הזה מתועדות השיטות של Quota Management API.

קבועים

הערכים הבאים הם קבועים מסוג webkitStorageInfo, שמציינים את סוג האחסון.

קבועValueהתיאור
TEMPORARY0אחסון זמני.
PERSISTENT1אחסון קבוע.

סקירה כללית של השיטה

queryUsageAndQuota
requestQuota

שיטות

queryUsageAndQuota

בודקים את גודל האחסון שנמצא בשימוש ואת המקום הפנוי שנשאר למארח.

 // you could also use it from webkitPersistentStorage
navigator.webkitTemporaryStorage.queryUsageAndQuota(
      successCallback,
      errorCallback);
  • successCallback: קריאה חוזרת (callback) אופציונלית עם שני פרמטרים:

    • מספר הבייטים הנוכחי שבו האפליקציה משתמשת.
    • מספר הבייטים שנותרו במכסה.
  • errorCallback: קריאה חוזרת (callback) עקב שגיאה אופציונלית.

requestQuota

כדאי לבקש עוד נפח אחסון. הדפדפן מציג סרגל מידע כדי לבקש מהמשתמש לאשר או לדחות את ההרשאה להגדלת נפח האחסון.

 // you could also use it from webkitTemporaryStorage
navigator.webkitPersistentStorage.requestQuota (
      newQuotaInBytes,
      quotaCallback,
      errorCallback);
פרמטרים
  • newQuotaInBytes: כמות הבייטים שרוצים במכסת האחסון.
  • successCallback: קריאה חוזרת (callback) אופציונלית שמעבירה את כמות הבייטים שהוענקה.
  • errorCallback: קריאה חוזרת (callback) עקב שגיאה אופציונלית.

פיתוח עתידי

התוכנית היא להוסיף את כל ממשקי ה-API לאחסון לא מקוון של HTML5 – כולל IndexedDB, מטמון האפליקציה, מערכת הקבצים וממשקי API אחרים שעשויים להופיע – ב-Quota Management API. אפשר יהיה לנהל את כל הקצאות האחסון באמצעות הכרטיס הזה.