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

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

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

תוכן עניינים

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

סוגי אחסון

ב-Google Chrome אפשר לבקש שלושה סוגי אחסון:

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

אחסון זמני

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

שיתוף המאגר

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

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

אנחנו מבקשים עוד מקום

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

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

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

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

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

אחסון מתמיד

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

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

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

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

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

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

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

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

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

התהליך הוא אוטומטי ואין צורך לבקש אותו.

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

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

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

זמינות

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

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

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

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

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

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

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

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

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

 

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

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

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

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

בדיוק כמו אחסון מתמיד.

 

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

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

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

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

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

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

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

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

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

ממשק API של File System

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

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

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

ניהול המכסות

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

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

למאמרי העזרה, עיינו בקטע הבא.

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

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

  • סוג האחסון שרוצים לבדוק
  • הקריאה החוזרת (callback) הושלמה בהצלחה

ייתכן שהשימוש שדווח על ידי ה-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() באמצעות הפרטים הבאים:

  • סוג האחסון
  • גודל
  • הקריאה החוזרת (callback) הושלמה בהצלחה

זה יקרה בהתאם לבקשה שלך:

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

קבועערךתיאור
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, Application Cache, File ממשקי API של המערכת וממשקי API אחרים שייתכן שיצוינו – במכסה ממשק API לניהול. תהיה לך אפשרות לנהל את כל הקצאת האחסון באמצעותו.