אופטימיזציה של הגישה לרשת

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

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

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

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

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

מכונת המצבים של רדיו ברשת 3G טיפוסית מורכבת משלושה מצבי אנרגיה:

  • עוצמה מלאה: משמשת כשהחיבור פעיל, ומאפשרת למכשיר להעביר נתונים בקצב הגבוה ביותר האפשרי.
  • צריכת חשמל נמוכה: מצב ביניים שמפחית את צריכת החשמל מהסוללה בכ-50%.
  • מצב המתנה: מצב שבו צריכת החשמל מינימלית, ואין חיבור פעיל לרשת.

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

כדי לצמצם את זמן האחזור, מכונת המצבים משתמשת בעיכוב כדי לדחות את המעבר למצבים שבהם צריכת האנרגיה נמוכה יותר. באיור 1 מוצגים התזמונים של AT&T עבור רדיו 3G טיפוסי.


איור 1. מכונת מצבים אופיינית של רדיו אלחוטי 3G.

מכונת מצבי הרדיו בכל מכשיר, במיוחד עיכוב המעבר המשויך ('זמן סיום') וחביון ההפעלה, משתנה בהתאם לטכנולוגיית הרדיו האלחוטי שבה נעשה שימוש (3G,‏ LTE,‏ 5G וכו') ומוגדרת ומותאמת על ידי רשת הספק שדרכה המכשיר פועל.

בדף הזה מתואר אוטומט מצבים מייצג של רדיו אלחוטי טיפוסי בטכנולוגיית 3G, על סמך נתונים שסופקו על ידי AT&T. עם זאת, העקרונות הכלליים והשיטות המומלצות שנובעות מהם רלוונטיים לכל יישומי הרדיו האלחוטי.

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

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

איך אפליקציות משפיעות על מכונת המצבים של הרדיו

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

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


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

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


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

טכניקות אופטימיזציה

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

העברות נתונים בחבילה

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

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

שליפה מראש של נתונים

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

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

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

הנה דוגמה מעשית.

קורא חדשות

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

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

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

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

שיקולים נוספים

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

המידה שבה מתבצעת אחזור מראש של נתונים תלויה בגודל הנתונים שמורידים ובסבירות שהם ישמשו אתכם. ככלל, על סמך מכונת המצבים שתוארה קודם, אם יש נתונים שיש סיכוי של 50% שישמשו בסשן הנוכחי של המשתמש, בדרך כלל אפשר לבצע אחזור מראש למשך כ-6 שניות (כ-1-2 מגה-בייט). זאת, לפני שהעלות הפוטנציאלית של הורדת נתונים שלא נעשה בהם שימוש תהיה שווה לחיסכון הפוטנציאלי של אי-הורדת הנתונים האלה מלכתחילה.

באופן כללי, מומלץ לבצע שליפה מראש (prefetch) של נתונים כך שתצטרכו להתחיל הורדה נוספת רק כל 2 עד 5 דקות, ובסדר גודל של 1 עד 5 מגה-בייט.

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

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

בדיקת הקישוריות לפני שליחת בקשות

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

חיבורים למאגרי מידע

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

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

HttpURLConnection ורוב לקוחות ה-HTTP, כמו OkHttp, מאפשרים כברירת מחדל שימוש חוזר בחיבורים, ושימוש באותו חיבור לכמה בקשות.

סיכום ומה צפוי בהמשך

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

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