פיתוח של דפי אינטרנט ואפליקציות למכשירים ניידים מציב אתגרים שונים בהשוואה לפיתוח של דף אינטרנט לדפדפני אינטרנט במחשב. השיטות המומלצות הבאות יעזרו לכם לספק את אפליקציית האינטרנט היעילה ביותר ל-Android ולמכשירים ניידים אחרים.
- הפניה של משתמשים במכשירים ניידים לגרסה ייעודית לנייד של האתר. יש כמה דרכים לעשות את זה באמצעות הפניות בצד השרת. שיטה נפוצה אחת היא 'לרחרח' את מחרוזת סוכן המשתמש שמסופקת על ידי דפדפן האינטרנט. כדי לקבוע אם להציג גרסה לנייד של האתר, צריך לחפש את המחרוזת 'mobile' בסוכן המשתמש.
- משתמשים ב-HTML5
למכשירים ניידים. HTML5 היא שפת התיוג הנפוצה ביותר שמשמשת לאתרים לנייד.
התקן הזה מעודד פיתוח לנייד תחילה, כדי להבטיח שהאתרים יפעלו במגוון מכשירים. בניגוד לשפות אינטרנט קודמות, ב-HTML5 נעשה שימוש בהצהרות פשוטות יותר של
<DOCTYPE>ושלcharset:<!DOCTYPE html> ... <meta charset="UTF-8">
- משתמשים במטא-נתונים של אזור התצוגה כדי לשנות את הגודל של דף האינטרנט כמו שצריך. במסמך
<head>, צריך לספק מטא-נתונים שמציינים איך רוצים שחלון התצוגה של הדפדפן יעבד את דף האינטרנט. לדוגמה, במטא-נתונים של אזור התצוגה אפשר לציין את הגובה והרוחב של אזור התצוגה בדפדפן, את קנה המידה הראשוני של הדף ואת צפיפות המסך לטירגוט.בדוגמה הבאה אפשר לראות איך מגדירים מטא-נתונים של אזור התצוגה:
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
מידע נוסף על השימוש במטא-נתונים של אזור התצוגה במכשירים עם Android זמין במאמר תמיכה במסכים שונים באפליקציות אינטרנט.
- משתמשים בפריסה ליניארית אנכית. כדאי להימנע ממצב שבו המשתמש צריך לגלול ימינה ושמאלה כדי לנווט בדף. כך קל יותר למשתמש לגלול למעלה ולמטה, והדף פשוט יותר.
- מגדירים את הגובה והרוחב של הפריסה ל-
match_parent. הגדרת הגובה והרוחב של אובייקטWebViewלערךmatch_parentמבטיחה שהתצוגות באפליקציה יהיו בגודל הנכון. לא מומלץ להגדיר את הערךwrap_contentלגובה, כי זה גורם לשינוי גודל שגוי. באופן דומה, הגדרת רוחב הפריסה ל-wrap_contentלא נתמכת וגורמת לרכיבWebViewלהשתמש ברוחב של רכיב האב במקום זאת. בגלל ההתנהגות הזו, חשוב גם לוודא שהגובה והרוחב של אף אחד מאובייקטי פריסת האם של אובייקטWebViewלא מוגדרים ל-wrap_content. - הימנעות מבקשות מרובות לקבצים. בדרך כלל מהירות החיבור של מכשירים ניידים נמוכה מזו של מחשבים, ולכן חשוב שטעינת הדף תהיה מהירה ככל האפשר. אחת הדרכים להאיץ את התהליך היא להימנע מטעינת קבצים נוספים כמו קובצי גיליונות סגנון וקובצי סקריפט ב-
<head>. כדאי גם לבצע ניתוח לנייד באמצעות PageSpeed Insights של Google כדי לקבל הצעות מפורטות לאופטימיזציה שספציפיות לאפליקציה שלכם. - אם לא צריך את סמלי האתר, כדאי להשבית את ההורדה האוטומטית שלהם.
כברירת מחדל,
WebViewמוריד באופן אוטומטי סמל אתר בכל פעם שמבקרים באתר במהלך הניווט. WebViewשומר שתי עותקים של כל סמל אתר שהורד (אחד ב-Java ואחד בזיכרון Native), לכן השבתת ההורדה של סמלי אתרים חוסכת זיכרון (כ-8 KB לכל מופע שלWebView) ומפחיתה את צריכת רוחב הפס. אם האפליקציה שלכם לא משתמשת בסמלי אתרים או לא מציגה אותם, אפשר להשתמש ב-WebSettingsCompat.setDownloadFaviconsEnabled()מהספרייה Jetpack Webkit כדי להשבית את ההורדות האוטומטיות:Kotlin
// In this example, "myWebView" is an instance of WebView. if (WebViewFeature.isFeatureSupported(WebViewFeature.DOWNLOAD_FAVICONS_ENABLED)) { WebSettingsCompat.setDownloadFaviconsEnabled(myWebView.settings, false) }
Java
// In this example, "myWebView" is an instance of WebView. if (WebViewFeature.isFeatureSupported(WebViewFeature.DOWNLOAD_FAVICONS_ENABLED)) { WebSettingsCompat.setDownloadFaviconsEnabled(myWebView.getSettings(), false); }
- ניהול מצב שמור והימנעות ממגבלות על עסקאות. אם שומרים את המצב של
WebViewבמהלך אירועים במחזור החיים באמצעותsaveState(Bundle), צריך לאכוף את מגבלות הגודל של מטען הייעודי באמצעותWebViewCompat.saveState()כדי להימנע מחריגה מהמגבלה של Android, שהיאsavedInstanceStateMB. מידע נוסף מופיע במאמר בנושא ניהול יעיל של מצב WebView. - אופטימיזציה של חיבורי רשת וטעינת דפים באמצעות ממשקי API לטעינה מראש.
כדי לצמצם את זמן האחזור של הניווט, אפשר להשתמש בממשקי ה-API של Jetpack Webkit כדי להכין מראש את חיבורי הרשת והתוכן.
מתקשרים אל
Profile.addQuicHintsכדי לאכלס מראש את התמיכה ב-HTTP/3 באמצעות QUIC, כך ש-WebView יוכל להשתמש ב-QUIC באופן מיידי בחיבור הראשון, ומשתמשים ב-Profile.preconnectכדי לחמם מראש את שקעי הרשת. אם כתובות היעד ידועות או סביר שיהיו ידועות, כדאי להשתמש ב-Profile.prefetchUrlAsyncאו ב-WebViewCompat.prerenderUrlAsyncכדי לאחזר או לעבד דפים ברקע. מידע נוסף זמין במאמר טעינה ספקולטיבית ב-WebView. - אם לא צריך את סמלי האתר, כדאי להשבית את ההורדה האוטומטית שלהם.
כברירת מחדל,
WebViewמוריד באופן אוטומטי סמל אתר בכל פעם שמבקרים באתר במהלך הניווט. WebViewשומר שתי עותקים של כל סמל אתר שהורד (אחד ב-Java ואחד בזיכרון Native), לכן השבתת ההורדה של סמלי אתרים חוסכת זיכרון (כ-8 KB לכל מופע שלWebView) ומפחיתה את צריכת רוחב הפס. אם האפליקציה שלכם לא משתמשת בסמלי אתרים או לא מציגה אותם, אפשר להשתמש ב-WebSettingsCompat.setDownloadFaviconsEnabled()מהספרייה Jetpack Webkit כדי להשבית את ההורדות האוטומטיות:Kotlin
// In this example, "myWebView" is an instance of WebView. if (WebViewFeature.isFeatureSupported(WebViewFeature.DOWNLOAD_FAVICONS_ENABLED)) { WebSettingsCompat.setDownloadFaviconsEnabled(myWebView.settings, false) }
Java
// In this example, "myWebView" is an instance of WebView. if (WebViewFeature.isFeatureSupported(WebViewFeature.DOWNLOAD_FAVICONS_ENABLED)) { WebSettingsCompat.setDownloadFaviconsEnabled(myWebView.getSettings(), false); }
- ניהול מצב שמור והימנעות ממגבלות על עסקאות. אם שומרים את המצב של
WebViewבמהלך אירועים במחזור החיים באמצעותsaveState(Bundle), צריך לאכוף את מגבלות הגודל של מטען הייעודי באמצעותWebViewCompat.saveState()כדי להימנע מחריגה מהמגבלה של Android, שהיאsavedInstanceStateMB. מידע נוסף מופיע במאמר בנושא ניהול יעיל של מצב WebView.
מקורות מידע נוספים
- טעינה מראש ב-WebView
- ניהול יעיל של מצב WebView
- ממשק משתמש מדויק ב-WebView
- מידע נוסף על עיצוב רספונסיבי
- תמונות עם DPI גבוה לצפיפויות פיקסלים משתנות
- שיטות מומלצות לשימוש באינטרנט בנייד
- שיפור המהירות של אתרים