אחסון קבוע

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

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

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

אחסון קבוע נתמך בהרבה דפדפנים מודרניים.

תמיכה בדפדפן

  • 55
  • 79
  • 57
  • 15.2

מקור

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

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

אפשר להשתמש ב-JavaScript כדי לקבוע אם האחסון באתר שלכם סומן כקבוע. קריאה ל-navigator.storage.persisted() מחזירה Promise שמסתיימת בבוליאני, שמציין אם האחסון סומן כקבוע (persistent disk).

// Check if site's storage has been marked as persistent
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persisted();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

מתי כדאי לבקש אחסון קבוע?

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

בקשה לנפח אחסון קבוע

כדי לבקש אחסון קבוע לנתוני האתר שלכם, צריך לבצע קריאה אל navigator.storage.persist(). הוא מחזיר Promise שמזהה את הערך בוליאני, ומציין אם ניתנה הרשאת האחסון הקבוע.

// Request persistent storage for site
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persist();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

איך מקבלים את ההרשאה?

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

Chrome ודפדפנים אחרים המבוססים על Chromium

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

ההיוריסטיקה כדי לקבוע אם אתר חשוב כוללת:

  • מה גובה רמת המעורבות באתר?
  • האם האתר הותקן או נוסף לסימניות?
  • האם האתר קיבל הרשאה להציג התראות?

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

Firefox

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

חלון קופץ שמוצג ב-Firefox כשאתר מבקש אחסון קבוע.
חלון קופץ שמוצג ב-Firefox כשאתר מבקש אחסון קבוע.

איזה נפח אחסון מוגן על ידי אחסון קבוע?

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

  • ממשק API של מטמון
  • עוגיות
  • אחסון DOM (אחסון מקומי)
  • File System API (מערכת קבצים שסופקה על ידי הדפדפן וארגז החול)
  • IndexedDB
  • קובצי שירות (service worker)
  • מטמון של אפליקציה (הוצא משימוש, לא כדאי להשתמש בו)
  • WebSQL (הוצא משימוש, לא כדאי להשתמש בו)

איך משביתים את האחסון הקבוע

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

סיכום

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

תודה

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

תמונה ראשית (Hero) של אומברטו ב-UnFlood