استخراج محتوى CSS المهم وتضمينه باستخدام "حرج"

سواء كنت تستخدِم مكتبة واجهة مستخدم أو تصمّم أنماطك يدويًا، يؤدّي إرسال كمية كبيرة من صفحات CSS إلى تأخير عرض الصفحة لأنّ المتصفح يجب أن ينزّل ملفات CSS ويحلّلها قبل أن يتمكّن من عرض الصفحة.

تم إنشاء معرض الآيس كريم سريع الاستجابة هذا باستخدام Bootstrap. تُسري مكتبات واجهة المستخدم، مثل Bootstrap، عملية التطوير، ولكن غالبًا ما يكون ذلك على حساب ملف CSS المتضخم وغير الضروري، ما قد يؤدي إلى إبطاء أوقات التحميل. يبلغ حجم Bootstrap 4 ‏187 كيلوبايت، في حين يبلغ حجم Semantic UI، وهي مكتبة أخرى لواجهة المستخدم، 730 كيلوبايت غير مضغوطة. حتى بعد تصغير Bootstrap وضغطه بتنسيق gzip، لا يزال حجمه حوالي 20 كيلوبايت، أي أكثر بكثير من الحدّ الأدنى البالغ 14 كيلوبايت لأول رحلة ذهاب وإياب.

Critical هي أداة لاستخراج CSS في الجزء العلوي من الصفحة وتصغيره وتضمينه. يتيح ذلك عرض المحتوى الظاهر فوق الشاشة في أقرب وقت ممكن، حتى إذا لم يتم تحميل أوراق CSS الخاصة بأجزاء أخرى من الصفحة بعد. في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية استخدام وحدة npm في Critical.

القياس

  • لمعاينة الموقع الإلكتروني، اضغط على عرض التطبيق. ثم اضغط على ملء الشاشة ملء الشاشة.

لإجراء عملية تدقيق في Lighthouse على هذا الموقع الإلكتروني:

  1. اضغط على Ctrl ‏+ Shift ‏+ J (أو Command ‏+ Option ‏+ J على نظام التشغيل Mac) لفتح DevTools.
  2. انقر على علامة التبويب مصباح الهداية.
  3. انقر على الأجهزة الجوّالة.
  4. ضَع علامة في مربّع الاختيار الأداء.
  5. أزِل العلامة من مربّعات الاختيار الأخرى في قسم "عمليات التدقيق".
  6. انقر على شبكة الجيل الثالث السريعة المحاكية، ووحدة المعالجة المركزية (CPU) أبطأ بأربعة أضعاف.
  7. ضَع علامة في مربّع الاختيار محو مساحة التخزين. من خلال تحديد هذا الخيار، لن يحمّل Lighthouse الموارد من ذاكرة التخزين المؤقت، التي يحاكي تجربة الزائرين لأول مرة في الصفحة.
  8. انقر على تشغيل عمليات التدقيق.

لوحة تدقيق "أدوات مطوري البرامج في Chrome" المستندة إلى Lighthouse

عند إجراء تدقيق على جهازك، قد تختلف النتائج الدقيقة، ولكن في عرض شريط الصور، ستلاحظ ظهور شاشة فارغة في التطبيق لفترة طويلة قبل عرض المحتوى في النهاية. لهذا السبب، تكون سرعة عرض المحتوى على الصفحة (FCP) مرتفعة وتكون نتيجة الأداء العام غير جيدة.

تدقيق Lighthouse يعرض نتيجة أداء تبلغ 84، ووقت عرض أول إطار (FCP) يبلغ 3 ثوانٍ، وعرض شريط صور لتحميل التطبيق

يساعدك Lighthouse في حلّ مشاكل الأداء، لذا ابحث عن الحلول في قسم الفرص. يتم إدراج إزالة الموارد التي تمنع العرض كإحدى الفرص، وهذا هو المكان الذي يبرز فيه الأداء "الحرِج".

قسم "فرص التحسين" في تدقيق Lighthouse يعرض "إزالة الموارد التي تحظر العرض"

تحسين

  • انقر على Remix to Edit (إنشاء ريمكس لتعديله) ليصبح المشروع قابلاً للتعديل.

لتسريع العملية، تم تثبيت "المهمة" من قبل وتضمين ملف إعداد فارغ في الدرس التطبيقي حول الترميز.

في ملف الإعداد critical.js، أضِف مرجعًا إلى "مهمة" ثم استدعِ الدالة critical.generate(). تقبل هذه الدالة عنصرًا يحتوي على الإعدادات.

const critical = require('critical');

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

إنّ معالجة الأخطاء ليست إلزامية، ولكنها طريقة سهلة لقياس نجاح العملية في وحدة التحكّم.

ضبط الإعدادات المهمة

يحتوي الجدول أدناه على بعض الخيارات المهمة والمفيدة. يمكنك الاطّلاع على كل الخيارات المتاحة على GitHub.

Option النوع الشرح
base سلسلة الدليل الأساسي لملفاتك
src سلسلة ملف مصدر HTML
dest سلسلة الوجهة لملف الإخراج. إذا تم تضمين CSS، فيكون ملف الإخراج HTML. وإذا لم يكن الأمر كذلك، سيكون الناتج ملف CSS.
width، height أرقام عرض إطار العرض وارتفاعه بالبكسل
dimensions صفيف يحتوي على كائنات بخصائص العرض والارتفاع. تمثّل هذه العناصر مساحات العرض التي تريد استهدافها باستخدام CSS في الجزء العلوي من الصفحة. إذا كانت لديك طلبات استعلام عن الوسائط في صفحات الأنماط المتتالية (CSS)، يتيح لك ذلك إنشاء صفحات CSS مهمة تغطّي أحجام مساحات العرض المتعدّدة.
inline قيمة منطقية عند الضبط على "صحيح"، يتم تضمين لغة CSS المهمة التي تم إنشاؤها في ملف HTML المصدر.
minify قيمة منطقية عند ضبط هذه السياسة على "صحيح"، تقلّل الحالة "حرجة" من حجم CSS المهم الذي تم إنشاؤه. يمكن الحذف عند استخراج محتوى CSS المهم لدرجات دقة متعددة، نظرًا لأن الإعداد "حرج" يؤدي إلى تصغيره تلقائيًا لتجنُّب تضمين قاعدة مكرّرة.

في ما يلي مثال على إعداد لاستخراج ملفات 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. يقرأ ملف CSS المهم أولاً ملف HTML المصدر، ويستخرج ملف CSS المهم، ثم يستبدل index.html بملف CSS المهم المضمّن في <head>.

تتضمن مصفوفة dimensions حجمي إطار عرض محدّدين: 300 × 500 للشاشات الصغيرة جدًا و1280 × 720 لشاشات الكمبيوتر المحمول العادية.

تم حذف الخيار minify لأنّ ميزة Critical تصغّر تلقائيًا ملف CSS المستخرَج عندما يتم تحديد أحجام مختلفة لمساحة العرض.

تشغيل ميزة "التشغيل الحرج"

أضِف "الأهمية القصوى" إلى النصوص البرمجية في package.json:

scripts: {
  "start": "node server.js",
  "critical": "node critical.js"
}
  1. انقر على Terminal (ملاحظة: إذا لم يظهر زر Terminal، قد تحتاج إلى استخدام خيار "ملء الشاشة").

لإنشاء ملفات CSS المهمة، نفِّذ ما يلي في وحدة التحكّم:

npm run critical
refresh
رسالة نجاح تفيد بأنّه &quot;تم إنشاء CSS مهم&quot; في وحدة التحكّم
رسالة النجاح في وحدة التحكّم

في علامة <head> من index.html، يتم الآن تضمين CSS المُنشأ بين علامتَي <style>، متبوعًا بنص برمجي يحمّل بقية CSS بشكل غير متزامن.

ملف index.html يتضمّن ملف CSS مهمًا مضمّنًا
محتوى CSS المهم المضمّن

قياس السرعة مرة أخرى

اتّبِع الخطوات من بداية ورشة رموز البرامج لتشغيل تدقيق أداء Lighthouse مرة أخرى. ستظهر لك النتائج بالشكل التالي:

تدقيق Lighthouse يعرض نتيجة الأداء 100، ووقت عرض اللقطة الواحدة 0.9 ثانية، وعرض مُحسَّن للشريط الزمني لتحميل التطبيق