אופטימיזציה של Web Vitals באמצעות Lighthouse

איתור הזדמנויות לשיפור חוויית המשתמש בעזרת הכלים של Chrome באינטרנט.

Addy Osmani
Addy Osmani

היום נעסוק בתכונות חדשות לכלים ב-Lighthouse, ב-PageSpeed ובכלי הפיתוח, כדי להבין איך אפשר לשפר את האתר באמצעות Web Vitals.

תזכורת לגבי הכלים: Lighthouse הוא כלי אוטומטי בקוד פתוח לשיפור האיכות של דפי אינטרנט. אפשר למצוא אותו בחבילה של כלי הפיתוח ל-Chrome לניפוי באגים ולהריץ אותו בכל דף אינטרנט, ציבורי או מחייב אימות. אפשר למצוא את Lighthouse גם ב-PageSpeed Insights, ב-CI וב-WebPageTest.

ב-Lighthouse 7.x יש תכונות חדשות כמו צילומי מסך של רכיבים, לצורך בדיקה ויזואלית קלה יותר של חלקים בממשק המשתמש, שמשפיעים על מדדים של חוויית משתמש (למשל, אילו צמתים תורמים לשינוי הפריסה).

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

צילומי מסך של רכיבים שמדגישים את צומת ה-DOM שתורם לשינוי הפריסה בדף

מדידת מדדי הליבה לבדיקת חוויית המשתמש באתר

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

הקטע Metrics בדוח Lighthouse כולל גרסאות Lab של המדדים האלה. אפשר להשתמש בדוח הזה כתצוגת סיכום לגבי ההיבטים של חוויית המשתמש שדורשים את תשומת ליבכם.

מדדי תאימות של Lighthouse
נתיב Web Vitals בחלונית הביצועים של כלי הפיתוח
האפשרות החדשה של מדדי ה-Web Vitals בחלונית הביצועים של כלי הפיתוח מציגה מעקב שמדגיש רגעים במדד, כמו Layout Shift (LS) שמוצג למעלה.

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

זיהוי מקומות שבהם ניתן לשפר את דוח ה-Web Vitals

זיהוי הרכיב מסוג Largest Contentful Paint (LCP)

LCP הוא מדד של חוויית הטעינה הנתפסת. היא מסמנת את הנקודה במהלך טעינת הדף שבה התוכן הראשי או ה'גדול ביותר' נטען והוא גלוי למשתמש.

ב-Lighthouse יש ביקורת 'המהירות שבה נטען רכיב התוכן הכי גדול (LCP)', שמזהה מה היה רכיב התוכן הכי גדול (LCP). העברת העכבר מעל הרכיב תדגיש אותו בחלון הראשי של הדפדפן.

רכיב Largest Contentful Paint (LCP)

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

בדיקת גודל נכון של תמונות

אפשר גם להשתמש ב-LCP Bookmarklet של Annie Sullivan כדי לזהות במהירות את רכיב ה-LCP עם מלבן אדום בלחיצה אחת.

הדגשת אלמנט ה-LCP באמצעות סימניה

טעינה מראש של תמונות שהתגלו מאוחר יותר כדי לשפר את ה-LCP

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

טעינה מראש של קובץ האימג' הגדול ביותר עם תוכן רב-תכליתי

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

יש אפשרות לטעון מראש תמונות רספונסיביות? כן. נניח שיש לנו תמונה ראשית (Hero) רספונסיבית, כפי שצוינה למעלה: srcset ו-sizes:

<img src="lighthouse.jpg"
          srcset="lighthouse_400px.jpg 400w,
                  lighthouse_800px.jpg 800w,
                  lighthouse_1600px.jpg 1600w" sizes="50vw" alt="A helpful
Lighthouse">

בזכות המאפיינים imagesrcset ו-imagesizes שנוספו למאפיין link, אנחנו יכולים לטעון מראש תמונה רספונסיבית באמצעות אותה לוגיקה של בחירת תמונה שבה נעשה שימוש ב-srcset וב-sizes:

<link rel="preload" as="image" href="lighthouse.jpg"
           imagesrcset="lighthouse_400px.jpg 400w,
                        lighthouse_800px.jpg 800w,
                        lighthouse_1600px.jpg 1600w"
imagesizes="50vw">

האם הבדיקה תדגיש גם הזדמנויות לטעינה מראש אם תמונת ה-LCP מוגדרת באמצעות רקע של CSS? כן.

כל תמונה שסומנה כתמונת LCP דרך רקע של CSS או באמצעות <img> יכולה להתאים אם היא מתגלה בעומק מפל של שלושה או יותר.

טעינה מדורגת של תמונות שלא מופיעות במסך ומניעה שלהן עבור LCP

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

דחיית ההצגה של תמונות שלא מופיעות במסך

אסור לטעון תמונות קריטיות בחלק העליון והקבוע, כמו התמונה מסוג Largest Contentful Paint (LCP), לטעינה מדורגת. פעולה כזו עלולה לעכב את הטעינה של תמונת ה-LCP. מערכת Lighthouse תדגיש אם תמונת LCP נטענה באופן שגוי באמצעות הביקורת 'תמונת ה-LCP 'המהירות שבה נטען רכיב התוכן הכי גדול (LCP)' נטענה באופן מדורג:

הימנעות מטעינה מדורגת של תמונות LCP

זיהוי תכנים שנוספו ל-CLS

Cumulative Layout Shift (CLS) הוא מדד של היציבות החזותית. הוא מציין את מידת השינוי החזותי של תוכן הדף. ב-Lighthouse יש ביקורת לניפוי באגים ב-CLS בשם "הימנעות משינויים גדולים בפריסה".

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

כדאי להימנע מבדיקה של שינויי פריסה גדולים ב-Lighthouse שמדגישים צומתי DOM רלוונטיים שתרמו ל-CLS

בזכות הפיצ'ר החדש של Lighthouse Element Screenshots, ניתן לראות תצוגה מקדימה ויזואלית של האלמנטים העיקריים שצוינו בבדיקה וגם לשנות את מרחק התצוגה בתצוגה ברורה יותר:

לחיצה על צילום מסך של Element תרחיב אותו

ב-CLS לאחר הטעינה, כדאי לשים לב לערך חזותי באופן קבוע עם מלבנים, אילו רכיבים תרמו הכי הרבה ל-CLS. את הפיצ'ר הזה אפשר למצוא בכלים של צדדים שלישיים, כמו מרכז הבקרה של מדדי הליבה לבדיקת חוויית המשתמש באתר ב-speedCurve, ולהשתמש בו ב-אוסף ה-GIF של Defaced Layout Shift ל:

שינויי הדגשה באמצעות מחולל לשינויי פריסה

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

בעיות ב-CLS מוצגות ב-Search Console

זיהוי CLS מתמונות ללא מידות

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

ביקורת לרכיבי תמונה ללא רוחב וגובה מפורשים

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

זיהוי CLS ממודעות

בעזרת Publisher Ads for Lighthouse אפשר לאתר הזדמנויות לשיפור חוויית הטעינה של המודעות בדף, כולל תרומות לשינוי הפריסה ומשימות ארוכות שעלולות לגרום למשתמשים לזמן שבו המשתמשים יוכלו להשתמש בדף. ב-Lighthouse אפשר להפעיל את האפשרות הזו דרך יישומי פלאגין לקהילה.

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

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

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

להימנע מאנימציות לא מורכבות

אנימציות לא מורכבות עלולות להציג את עצמן כמהירות במכשירים פשוטים יותר אם משימות JavaScript כבדות גורמות לעומס על ה-thread הראשי. אנימציות כאלה יכולות לכלול שינויי פריסה.

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

ביקורת למניעת אנימציות לא מורכבות

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

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

בדיקה למניעת משימות ארוכות בשרשור הראשי

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

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

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

ב-Calibre החזותי של ציר הזמן לביצוע של ה-thread הראשי יש

חסימה של בקשות רשת כדי לראות את ההשפעה לפני/אחריה ב-Lighthouse

בכלי הפיתוח ל-Chrome יש תמיכה בחסימת בקשות רשת כדי לראות את ההשפעה של הסרה או אי-זמינות של משאבים ספציפיים. האפשרות הזו יכולה לעזור לכם להבין את העלות של סקריפטים נפרדים (למשל, הטמעות של צד שלישי או כלי מעקב) על מדדים כמו Total Block Time (TBT) ו-Time to Interactive.

חסימה של בקשות רשת עובדת גם עם Lighthouse! בואו נסתכל על דוח Lighthouse לגבי אתר מסוים. ציון Perf הוא 63/100 עם TBT של 400 אלפיות השנייה. בעיון בקוד, גילינו שהאתר הזה טוען polyfill של Intersection Observer ב-Chrome, שאין צורך בו. בואו נחסום אותו!

חסימה של בקשות רשת

אפשר ללחוץ לחיצה ימנית על סקריפט בחלונית DevTools Network וללחוץ על Block Request URL כדי לחסום אותו. כאן נעשה זאת עבור ה-polyfill של Intersection Observer.

חסימת כתובות URL של בקשות בכלי הפיתוח

לאחר מכן נוכל להפעיל מחדש את Lighthouse. הפעם אנחנו יכולים לראות שציון הביצועים השתפר (70/100) מכיוון שזמן החסימה הכולל (400 אלפיות שנייה => 300 אלפיות שנייה).

מה קורה אחרי שחוסמים בקשות רשת יקרות

החלפת הטמעות יקרות של צד שלישי עם חזית

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

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

ביקורת שמדגישה שאפשר להחליף משאבים יקרים של צדדים שלישיים

תזכורת: ב-Lighthouse ידגיש קוד של צד שלישי שחוסם את ה-thread הראשי למשך יותר מ-250 אלפיות השנייה. המצב הזה עלול לחשוף את כל סוגי הסקריפטים של צדדים שלישיים (כולל סקריפטים שנוצרו על ידי Google) שעדיף לדחות את הטעינה שלהם או לטעון אותם באופן מדורג אם צריך לגלול כדי לצפות בהם.

הפחתת העלות של ביקורת JavaScript על ידי צד שלישי

מעבר למדדי הליבה לבדיקת חוויית המשתמש באתר

מעבר להדגשת הדוח בנושא Core Web Vitals, גם הגרסאות האחרונות של Lighthouse ו-PageSpeed Insights נועדו לספק הכוונה מעשית לשיפור המהירות שבה אפליקציות אינטרנט עמוסות ב-JavaScript יכולות להיטען אם מפות המקור מופעלות.

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

למידע נוסף על הכלים בנושא Core Web Vitals, מומלץ לעקוב אחר חשבון Twitter של צוות Lighthouse ובמאמר מה חדש בכלי הפיתוח.

תמונה ראשית (Hero) מאת Mercedes Mehling במשחק Unbounce.