CSS برای Web Vitals

تکنیک های مرتبط با CSS برای بهینه سازی Web Vitals

روشی که استایل‌ها و طرح‌بندی‌های خود را می‌نویسید، می‌تواند تأثیر زیادی بر Core Web Vitals داشته باشد. این به ویژه برای تغییر چیدمان تجمعی (CLS) و بزرگترین رنگ محتوایی (LCP) صادق است.

این مقاله تکنیک های مرتبط با CSS را برای بهینه سازی Web Vitals پوشش می دهد. این بهینه‌سازی‌ها بر اساس جنبه‌های مختلف صفحه تجزیه می‌شوند: چیدمان، تصاویر، فونت‌ها، انیمیشن‌ها و بارگذاری. در طول راه، بهبود یک صفحه نمونه را بررسی خواهیم کرد:

اسکرین شات نمونه سایت

طرح بندی

درج محتوا در DOM

درج محتوا در یک صفحه پس از بارگیری محتوای اطراف، سایر موارد موجود در صفحه را پایین می‌آورد. این باعث تغییر چیدمان می شود.

اعلامیه های کوکی ، به ویژه آنهایی که در بالای صفحه قرار می گیرند، نمونه رایج این مشکل هستند. سایر عناصر صفحه که اغلب باعث این نوع تغییر طرح بندی هنگام بارگیری می شوند عبارتند از تبلیغات و جاسازی ها.

شناسایی کنید

ممیزی Lighthouse "Avoid large layout shifts" عناصر صفحه را که جابجا شده اند شناسایی می کند. برای این دمو، نتایج به این صورت است:

ممیزی "جلوگیری از تغییرات طرح بندی بزرگ" Lighthouse

اعلان کوکی در این یافته‌ها فهرست نشده است، زیرا خود اعلامیه کوکی هنگام بارگیری تغییر نمی‌کند. بلکه باعث می شود آیتم های زیر آن در صفحه (یعنی div.hero و article ) جابجا شوند. برای اطلاعات بیشتر در مورد شناسایی و رفع تغییرات طرح‌بندی، به اشکال‌زدایی تغییرات طرح‌بندی مراجعه کنید.

رفع کنید

اعلامیه کوکی را با استفاده از موقعیت مطلق یا ثابت در پایین صفحه قرار دهید.

اعلامیه کوکی در پایین صفحه نمایش داده می شود

قبل از:

.banner {
  position: sticky;
  top: 0;
}

بعد از:

.banner {
  position: fixed;
  bottom: 0;
}

راه دیگر برای رفع این تغییر چیدمان، رزرو فضا برای اطلاعیه کوکی در بالای صفحه است. این رویکرد به همان اندازه مؤثر است. برای اطلاعات بیشتر، به بهترین شیوه های اطلاعیه کوکی مراجعه کنید.

تصاویر

تصاویر و بزرگترین رنگ محتوایی (LCP)

تصاویر معمولاً بزرگترین عنصر رنگ محتوایی (LCP) در یک صفحه هستند. سایر عناصر صفحه که می توانند عنصر LCP باشند عبارتند از بلوک های متنی و تصاویر پوستر ویدیو. زمانی که عنصر LCP بارگذاری می شود، LCP را تعیین می کند.

توجه به این نکته مهم است که عنصر LCP یک صفحه می تواند از بارگذاری صفحه به بارگذاری صفحه دیگر بسته به محتوایی که در هنگام نمایش صفحه برای اولین بار برای کاربر قابل مشاهده است متفاوت باشد. به عنوان مثال، در این دمو، پس‌زمینه اطلاعیه کوکی، تصویر قهرمان و متن مقاله برخی از عناصر بالقوه LCP هستند.

نموداری که عنصر LCP صفحه را در سناریوهای مختلف برجسته می کند.

در سایت مثال، تصویر پس زمینه اطلاعیه کوکی در واقع یک تصویر بزرگ است. برای بهبود LCP، به جای آن که یک تصویر را برای ایجاد افکت بارگذاری کنید، می‌توانید گرادیان را در CSS نقاشی کنید.

رفع کنید

CSS .banner را برای استفاده از گرادیان CSS به جای تصویر تغییر دهید:

قبل از:

background: url("https://cdn.pixabay.com/photo/2015/07/15/06/14/gradient-845701\_960\_720.jpg")

بعد از:

background: linear-gradient(135deg, #fbc6ff 20%, #bdfff9 90%);

تصاویر و چیدمان تغییر می کند

مرورگرها تنها زمانی می توانند اندازه تصویر را تعیین کنند که تصویر بارگذاری شود. اگر بارگذاری تصویر پس از رندر شدن صفحه اتفاق بیفتد، اما فضایی برای تصویر در نظر گرفته نشده باشد، زمانی که تصویر ظاهر می‌شود، تغییر طرح اتفاق می‌افتد. در نسخه ی نمایشی، تصویر قهرمان هنگام بارگیری باعث تغییر طرح بندی می شود.

شناسایی کنید

برای شناسایی تصاویر بدون width و height واضح، از ممیزی "عناصر تصویر دارای عرض و ارتفاع صریح هستند" Lighthouse استفاده کنید.

ممیزی "عناصر تصویر دارای عرض و ارتفاع صریح" Lighthouse است

در این مثال، هر دو تصویر قهرمان و تصویر مقاله دارای ویژگی های width و height هستند.

رفع کنید

ویژگی های width و height را روی این تصاویر تنظیم کنید تا از تغییر طرح بندی جلوگیری کنید.

قبل از:

<img src="https://source.unsplash.com/random/2000x600" alt="image to load in">
<img src="https://source.unsplash.com/random/800x600" alt="image to load in">

بعد از:

<img src="https://source.unsplash.com/random/2000x600" width="2000" height="600" alt="image to load in">
<img src="https://source.unsplash.com/random/800x600" width="800" height="600" alt="image to load in">
اکنون تصویر بدون ایجاد تغییر طرح بارگیری می شود.

فونت ها

فونت ها می توانند رندر متن را به تأخیر بیندازند و باعث تغییر طرح شوند. در نتیجه، تحویل سریع فونت ها مهم است.

تأخیر در ارائه متن

به‌طور پیش‌فرض، اگر فونت‌های وب مرتبط با آن هنوز بارگذاری نشده باشند، مرورگر فوراً یک عنصر متنی را ارائه نمی‌کند. این کار برای جلوگیری از "فلش متن بدون استایل" (FOUT) انجام می شود. در بسیاری از موقعیت‌ها، این کار First Contentful Paint (FCP) را به تاخیر می‌اندازد. در برخی شرایط، این کار بزرگترین رنگ محتوایی (LCP) را به تاخیر می اندازد.

چیدمان تغییر می کند

تعویض فونت، در حالی که برای نمایش سریع محتوا به کاربر بسیار عالی است، این پتانسیل را دارد که باعث تغییر چیدمان شود. این تغییرات چیدمان زمانی اتفاق می‌افتد که یک فونت وب و فونت بازگشتی آن مقادیر متفاوتی از فضای صفحه را اشغال کنند. استفاده از فونت‌های با نسبت مشابه، اندازه این تغییرات طرح‌بندی را به حداقل می‌رساند.

نموداری که تغییر چیدمان ناشی از تعویض فونت را نشان می دهد
در این مثال، جابجایی فونت باعث شد تا عناصر صفحه به اندازه پنج پیکسل به سمت بالا جابجا شوند.

شناسایی کنید

برای دیدن فونت هایی که در یک صفحه خاص بارگذاری می شوند، تب Network را در DevTools باز کنید و بر اساس فونت فیلتر کنید. فونت ها می توانند فایل های بزرگ باشند، بنابراین فقط استفاده از فونت های کمتر به طور کلی برای عملکرد بهتر است.

اسکرین شات از یک فونت نمایش داده شده در DevTools

برای اینکه ببینید چقدر طول می کشد تا فونت درخواست شود، روی زبانه زمان بندی کلیک کنید. هر چه زودتر فونت درخواست شود، زودتر می توان آن را بارگیری و استفاده کرد.

اسکرین شات از برگه "Timing" در DevTools

برای مشاهده زنجیره درخواست برای فونت، روی تب Initiator کلیک کنید. به طور کلی، هرچه زنجیره درخواست کوتاه‌تر باشد، فونت را زودتر می‌توان درخواست کرد.

اسکرین شات تب 'Initiator' در DevTools

رفع کنید

این نسخه ی نمایشی از Google Fonts API استفاده می کند. فونت های گوگل گزینه بارگیری فونت ها را از طریق تگ های <link> یا عبارت @import فراهم می کند. قطعه کد <link> شامل یک راهنمایی منبع preconnect است. این باید منجر به تحویل سریعتر شیوه نامه نسبت به استفاده از نسخه @import شود.

در یک سطح بسیار بالا، می‌توانید نکات منبع را به عنوان راهی برای اشاره به مرورگر در نظر بگیرید که باید یک اتصال خاص را تنظیم کند یا یک منبع خاص را دانلود کند. در نتیجه مرورگر این اقدامات را اولویت بندی می کند. هنگام استفاده از نکات منابع، به خاطر داشته باشید که اولویت دادن به یک اقدام خاص، منابع مرورگر را از سایر اقدامات دور می کند. بنابراین، نکات منابع باید با تفکر و نه برای همه چیز استفاده شوند. برای اطلاعات بیشتر، به برقراری اتصالات شبکه زود هنگام برای بهبود سرعت درک شده صفحه مراجعه کنید.

عبارت @import زیر را از شیوه نامه خود حذف کنید:

@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400&family=Roboto:wght@300&display=swap');

تگ های <link> زیر را به <head> سند اضافه کنید:

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@100&display=swap" rel="stylesheet">

این تگ‌های پیوند به مرورگر دستور می‌دهند تا ارتباط اولیه‌ای با مبداهای استفاده شده توسط فونت‌های Google برقرار کند و برگه سبکی را که حاوی اعلامیه فونت برای Montserrat و Roboto است بارگیری کند. این تگ‌های <link> باید تا حد امکان زودتر در <head> قرار گیرند.

انیمیشن ها

اولین روشی که انیمیشن‌ها روی Web Vitals تأثیر می‌گذارند، زمانی است که باعث تغییر طرح‌بندی می‌شوند. دو نوع انیمیشن وجود دارد که باید از استفاده از آنها اجتناب کنید: انیمیشن‌هایی که طرح‌بندی را فعال می‌کنند و افکت‌های «انیمیشن مانند» که عناصر صفحه را جابه‌جا می‌کنند. معمولاً این انیمیشن ها را می توان با معادل های کارآمدتر با استفاده از ویژگی های CSS مانند transform ، opacity و filter جایگزین کرد. برای اطلاعات بیشتر، نحوه ایجاد انیمیشن های CSS با کارایی بالا را ببینید.

شناسایی کنید

ممیزی Lighthouse "Avoid non-composited animations" ممکن است برای شناسایی انیمیشن های غیرقابل اجرا مفید باشد.

ممیزی "پرهیز از انیمیشن های غیر ترکیبی" Lighthouse

رفع کنید

دنباله انیمیشن slideIn را تغییر دهید تا از transform: translateX() به جای انتقال ویژگی margin-left استفاده کنید.

قبل از:

.header {
  animation: slideIn 1s 1 ease;
}

@keyframes slideIn {
  from {
    margin-left: -100%;
  }
  to {
    margin-left: 0;
  }
}

بعد از:

.header {
  animation: slideIn 1s 1 ease;
}

@keyframes slideIn {
  from {
    transform: translateX(-100%);
  }

  to {
    transform: translateX(0);
  }
}

CSS بحرانی

استایل شیت ها رندر را مسدود می کنند. این به این معنی است که مرورگر با یک شیوه نامه مواجه می شود، تا زمانی که مرورگر صفحه سبک را دانلود و تجزیه نکرده باشد، دانلود منابع دیگر را متوقف می کند. این ممکن است LCP را به تاخیر بیاندازد. برای بهبود عملکرد، حذف CSS استفاده نشده ، درون‌بندی CSS حیاتی و به تعویق انداختن CSS غیر بحرانی را در نظر بگیرید.

نتیجه گیری

اگرچه هنوز جا برای پیشرفت‌های بیشتر وجود دارد (مثلاً استفاده از فشرده‌سازی تصویر برای ارائه سریع‌تر تصاویر)، اما این تغییرات به طور قابل توجهی Web Vitals این سایت را بهبود بخشیده است. اگر این یک سایت واقعی بود، گام بعدی جمع‌آوری داده‌های عملکرد از کاربران واقعی بود تا ارزیابی شود که آیا آستانه‌های Web Vitals برای اکثر کاربران برآورده می‌شود یا خیر. برای اطلاعات بیشتر درباره Web Vitals، به Learn Web Vitals مراجعه کنید.