אחסון קבוע

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

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

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

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

תמיכה בדפדפנים

  • Chrome: 55.
  • Edge:‏ 79.
  • Firefox: 57.
  • Safari: 15.2.

מקור

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

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

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

// 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 כשאתר מבקש אחסון מתמיד.

איזה אחסון מוגן באמצעות אחסון מתמיד?

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

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

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

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

סיכום

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

תודה

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

תמונה ראשית (Hero) של Umberto ב-Unsplash