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