הצגה דינמית בהתאם לאיכות הרשת

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

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

תמיכה בדפדפן

  • Chrome:‏ 61.
  • Edge:‏ 79.
  • Firefox: לא נתמך.
  • Safari: לא נתמך.

מקור

שימוש

יש הרבה דרכים להשתמש במידע הזה על הרשת כדי לשפר את חוויית המשתמש:

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

אפליקציות רבות כבר עושות משהו דומה. לדוגמה, ב-YouTube, ב-Netflix וברוב שירותי הווידאו (או שיחות הווידאו) האחרים, הרזולוציה משתנה באופן אוטומטי במהלך הסטרימינג. כש-Gmail נטען, הוא מציג למשתמשים קישור ל'טעינה של HTML בסיסי (לחיבורים איטיים)'.

קישור לטעינה של גרסת HTML בסיסית של Gmail כשהמשתמשים מחוברים לחיבורים איטיים

איך זה עובד

האובייקט navigator.connection מכיל מידע על החיבור של הלקוח. המאפיינים שלו מוסברים בהמשך הטבלה.

נכס הסבר
downlink אומדן רוחב הפס, במגה-ביט לשנייה.
effectiveType הסוג האפקטיבי של החיבור, עם הערכים האפשריים 'slow-2g', '2g', '3g' או '4g' (נפח של 4G ומעלה). נקבעת על סמך השילוב של זמן הנסיעה הלוך ושוב ומהירות הקישור לרשת. לדוגמה, לקישור ירידה מהיר בשילוב עם זמן אחזור גבוה יהיה ערך effectiveType נמוך יותר בגלל זמן האחזור.
onchange פונקציית טיפול באירועים שמופעלת כשפרטי החיבור משתנים.
rtt זמן האחזור המשוער של הלוך ושוב בחיבור, באלפיות שנייה.
saveData ערך בוליאני שמגדיר אם המשתמש ביקש מצב של שימוש מופחת בנתונים.

כך זה נראה כשמריצים אותו במסוף הדפדפן:

מסוף כלי הפיתוח ל-Chrome שבו מוצגים ערכי המאפיינים של האובייקט navigator.connect

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

באמצעות מאזין האירועים onchange תוכלו להתאים את עצמכם באופן דינמי לשינויים באיכות הרשת. אם דחיתם העלאות או הורדות בגלל תנאי רשת גרועים, תוכלו להסתמך על מאזין האירועים שיפעיל מחדש את ההעברה כשיזהה תנאי רשת טובים יותר. אפשר גם להשתמש בה כדי להודיע למשתמשים כשאיכות הרשת משתנה. לדוגמה, אם הם איבדו את האות של ה-Wi-Fi והמכשיר עבר לרשת סלולרית, זה יכול למנוע העברות נתונים בטעות (וחיובים 💸).

משתמשים ב-event listener של onchange כמו בכל event listener אחר:

navigator.connection.addEventListener('change', doSomethingOnChange);

סיכום

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