אחסון קבוע

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

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

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

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

תמיכה בדפדפן

  • Chrome: 55.
  • קצה: 79.
  • Firefox: 57.
  • Safari: 15.2.

מקור

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

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

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

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

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

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

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

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

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

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

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

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

Firefox

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

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

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

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

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

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

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

סיכום

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

תודה

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

התמונה הראשית של Umberto ב-Unbounce