אחסון קבוע

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

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

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

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

תמיכה בדפדפן

  • 55
  • 79
  • 57
  • 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)
  • מטמון אפליקציה (הוצא משימוש, אין להשתמש בו)
  • WebSQL (הוצא משימוש, לא צריך להשתמש בו)

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

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

סיכום

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

תודה

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

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