דחיית CSS שאינו קריטי

Demián Renzulli
Demián Renzulli

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

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

דוגמה: טעינה לא אופטימלית של שירות ה-CSS

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

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

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

מדידה

מריצים את Lighthouse בדף ועוברים לקטע Performance (ביצועים).

הדוח מציג את המדד First Contentful Paint (הצגת תוכן ראשוני) עם הערך '1s', ואת ההזדמנות לבטל משאבים חוסמי רינדור, ומפנים אל הקובץ style.css:

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

כדי לראות איך שירות ה-CSS הזה חוסם רינדור:

  1. פותחים את הדף ב-Chrome.
  2. מקישים על Control+Shift+J (או על Command+Option+J ב-Mac) כדי לפתוח את כלי הפיתוח.
  3. לוחצים על הכרטיסייה ביצועים.
  4. בחלונית 'ביצועים', לוחצים על טעינה מחדש.

בדוח המעקב שמתקבל, תוכלו לראות שהסמן FCP ממוקם מיד אחרי שהטעינה של שירות ה-CSS הסתיימה:

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

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

אופטימיזציה

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

  1. בכלי הפיתוח, פותחים את תפריט הפקודה על ידי הקשה על Control+Shift+P או Command+Shift+P (ב-Mac).
  2. מקלידים "כיסוי" ובוחרים באפשרות הצגת כיסוי.
  3. לוחצים על טעינה מחדש כדי לטעון מחדש את הדף ולהתחיל לתעד את הכיסוי.
כיסוי של קובץ CSS עם 55.9% בייטים שלא בשימוש.
בדוח 'כיסוי' מוצג אחוז השימוש בשירות ה-CSS בפועל במהלך טעינת הדף הראשונית.

לוחצים לחיצה כפולה על הדוח כדי להציג את הפרטים שלו:

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

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

  1. מחלצים את הגדרות הכיתות שמסומנות בירוק בדוח הכיסוי ומציבים את המחלקות האלה בבלוק <style> בראש הדף:

    <style type="text/css">
    .accordion-btn {background-color: #ADD8E6;color: #444;cursor: pointer;padding: 18px;width: 100%;border: none;text-align: left;outline: none;font-size: 15px;transition: 0.4s;}.container {padding: 0 18px;display: none;background-color: white;overflow: hidden;}h1 {word-spacing: 5px;color: blue;font-weight: bold;text-align: center;}
    </style>
    
  2. טוענים את שאר המחלקות באופן אסינכרוני על ידי החלת התבנית הבאה:

    <link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
    <noscript><link rel="stylesheet" href="styles.css"></noscript>
    

זו לא הדרך הרגילה לטעון CSS. ככה זה עובד:

  • link rel="preload" as="style" מבקש את גיליון הסגנונות באופן אסינכרוני. מידע נוסף על preload מופיע במדריך לטעינה מראש של נכסים קריטיים.
  • המאפיין onload ב-link מאפשר לדפדפן לעבד את ה-CSS כשגיליון הסגנונות מסיים את הטעינה.
  • "null" ל-handler של onload אחרי שמשתמשים בו עוזרת לדפדפנים מסוימים להימנע מקריאה מחדש ל-handler כשהם מחליפים את המאפיין rel.
  • ההפניה לגיליון הסגנון שבתוך הרכיב noscript מספקת חלופה לדפדפנים שלא מפעילים JavaScript.

הדף שמתקבל נראה בדיוק כמו הגרסה הקודמת, גם אם רוב הסגנונות נטענים באופן אסינכרוני. כך נראים הסגנונות המוטבעים והבקשות האסינכרוניות לקובץ ה-CSS בקובץ ה-HTML:

צג

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

הסמן FCP מופיע לפני שהדף מבקש את ה-CSS, כך שהדפדפן לא צריך להמתין לטעינת ה-CSS לפני שהוא מעבד את הדף:

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

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

בדוח, תראו שדף ה-FCP הופחת ב-0.2 (שיפור של 20%!):

דוח Lighthouse שבו מוצג ערך FCP של 0.8.
ה-FCP החדש והמוקטן.

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

דוח Lighthouse
 שמוצג בו האפשרות &#39;מחיקת משאבים חוסמים&#39; בקטע &#39;ביקורות שעברו&#39;.
הדף עובר עכשיו את הבדיקה של המשאבים החוסמים.

השלבים הבאים והפניות

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