CSS بحرانی را با Critical استخراج و درون خطی کنید

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

این گالری بستنی پاسخگو با Bootstrap ساخته شده است. کتابخانه‌های UI مانند Bootstrap سرعت توسعه را افزایش می‌دهند، اما این اغلب به قیمت CSS متورم و غیرضروری است که می‌تواند زمان بارگذاری شما را کاهش دهد. Bootstrap 4 187 KB است، در حالی که Semantic UI ، یک کتابخانه UI دیگر، 730 KB فشرده نشده است. وزن بوت استرپ حتی زمانی که کوچک و gzip می شود، هنوز حدود 20 کیلوبایت است، که بسیار بیشتر از آستانه 14 کیلوبایت برای اولین رفت و برگشت است.

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

اندازه گیری کنید

  • برای پیش نمایش سایت، View App را فشار دهید. سپس تمام صفحه را فشار دهید تمام صفحه .

برای اجرای ممیزی Lighthouse در این سایت:

  1. «Control+Shift+J» (یا «Command+Option+J» در Mac) را فشار دهید تا DevTools باز شود.
  2. روی تب Lighthouse کلیک کنید.
  3. روی موبایل کلیک کنید.
  4. چک باکس Performance را انتخاب کنید.
  5. بقیه چک باکس ها را در قسمت Audits پاک کنید.
  6. روی Simulated Fast 3G, 4x CPU Slowdown کلیک کنید.
  7. چک باکس Clear Storage را انتخاب کنید. با انتخاب این گزینه، Lighthouse منابع را از کش بارگیری نمی کند، که شبیه سازی نحوه تجربه بازدیدکنندگان برای اولین بار از صفحه است.
  8. روی Run Audits کلیک کنید.

پانل ممیزی Chrome DevTools که توسط Lighthouse طراحی شده است

هنگامی که یک ممیزی روی دستگاه خود اجرا می کنید، نتایج دقیق ممکن است متفاوت باشد، اما در نمای نوار فیلم، متوجه خواهید شد که برنامه برای مدتی قبل از اینکه در نهایت محتوا را ارائه کند، صفحه خالی دارد. به همین دلیل است که First Contentful Paint (FCP) بالا است و امتیاز عملکرد کلی عالی نیست.

ممیزی فانوس دریایی با امتیاز عملکرد 84، FCP 3 ثانیه و نمای نوار فیلم از بارگیری برنامه

Lighthouse اینجاست تا به شما در رفع مشکلات عملکرد کمک کند، بنابراین در بخش فرصت ها به دنبال راه حل باشید. حذف منابع مسدودکننده رندر به عنوان یک فرصت فهرست شده است و اینجاست که Critical می درخشد!

بخش «فرصت‌ها» ممیزی فانوس دریایی با فهرست «حذف منابع مسدودکننده رندر»

بهینه سازی کنید

  • روی Remix to Edit کلیک کنید تا پروژه قابل ویرایش باشد.

برای سرعت بخشیدن به کارها، Critical قبلاً نصب شده است و یک فایل پیکربندی خالی در لاب کد گنجانده شده است.

در فایل پیکربندی critical.js ، یک مرجع به Critical اضافه کنید و سپس تابع critical.generate() را فراخوانی کنید. این تابع یک شی حاوی پیکربندی را می پذیرد.

const critical = require('critical');

critical.generate({
    // configuration
},(err, output) => {
  if (err) {
    console.error(err);
  } else if (output) {
    console.log('Generated critical CSS');
  }
});

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

Critical را پیکربندی کنید

جدول زیر حاوی برخی از گزینه های مفید Critical است. می توانید تمام گزینه های موجود در GitHub را بررسی کنید.

گزینه تایپ کنید توضیح
base رشته دایرکتوری پایه برای فایل های شما.
src رشته فایل منبع HTML.
dest رشته هدف برای فایل خروجی. اگر CSS درون خطی باشد، فایل خروجی HTML است. اگر نه، خروجی یک فایل CSS است.
width ، height اعداد عرض و ارتفاع درگاه دید بر حسب پیکسل.
dimensions آرایه شامل اشیایی با ویژگی های عرض و ارتفاع است. این اشیاء نمایانگر ویوپورت هایی هستند که می خواهید با CSS بالای صفحه هدف قرار دهید. اگر پرس و جوهای رسانه ای در CSS خود دارید، این به شما امکان می دهد CSS مهمی را ایجاد کنید که اندازه های چند نما را پوشش می دهد.
inline بولی وقتی روی true تنظیم شود، CSS بحرانی تولید شده در داخل خط قرار می گیرد فایل منبع HTML
minify بولی وقتی روی true تنظیم شود، Critical CSS بحرانی تولید شده را کوچک می کند. می‌توان هنگام استخراج CSS حیاتی برای چندین وضوح حذف کرد زیرا Critical به طور خودکار آن را کوچک می‌کند تا از گنجاندن قوانین تکراری جلوگیری شود.

در زیر یک مثال پیکربندی برای استخراج CSS حیاتی برای رزولوشن های متعدد آورده شده است. آن را به critical.js اضافه کنید یا به بازی بپردازید و گزینه ها را تغییر دهید.

critical.generate({
  base: 'public/',
  src: './index.html',
  dest: './index.html',
  inline: true,
  dimensions: [
    {
      height: 500,
      width: 300,
    },
    {
      height: 720,
      width: 1280,
    },
  ]
}, (err, output) => {
  if (err) {
    console.error(err);
  } else if (output) {
    console.log('Generated critical CSS');
  }
});

در این مثال، index.html هم فایل مبدا و هم فایل مقصد است زیرا گزینه inline روی true تنظیم شده است. Critical ابتدا فایل منبع HTML را می خواند، CSS حیاتی را استخراج می کند و سپس index.html با CSS حیاتی که در <head> خطی شده است، بازنویسی می کند.

آرایه dimensions دارای دو اندازه درگاه دید مشخص شده است: 300 x 500 برای صفحه نمایش های بسیار کوچک و 1280 x 720 برای صفحه نمایش لپ تاپ های استاندارد.

گزینه minify حذف شده است زیرا Critical به طور خودکار CSS استخراج شده را زمانی که اندازه های نمایش چندگانه مشخص شده باشد کوچک می کند.

Critical را اجرا کنید

Critical را به اسکریپت های خود در package.json اضافه کنید:

scripts: {
  "start": "node server.js",
  "critical": "node critical.js"
}
  1. روی ترمینال کلیک کنید (توجه: اگر دکمه ترمینال نشان داده نشد، ممکن است لازم باشد از گزینه تمام صفحه استفاده کنید).

برای تولید CSS حیاتی، در کنسول، اجرا کنید:

npm run critical
refresh
پیام موفقیت آمیز با این مضمون که «CSS حیاتی ایجاد شد» در کنسول
پیام موفقیت در کنسول

اکنون در تگ <head> index.html ، CSS حیاتی تولید شده بین تگ‌های <style> خط‌بندی می‌شود و به دنبال آن یک اسکریپت که بقیه CSS را به صورت ناهمزمان بارگذاری می‌کند.

index.html با CSS بحرانی خطی
CSS بحرانی خطی

دوباره اندازه گیری کن

برای اجرای مجدد ممیزی عملکرد Lighthouse، مراحل ابتدای کدلب را دنبال کنید. نتایجی که به دست می آورید مشابه این خواهد بود:

ممیزی فانوس دریایی با نمایش امتیاز عملکرد 100، FCP 0.9 ثانیه و نمای نوار فیلم بهبود یافته از بارگیری برنامه