أساسيات أداء الواجهة الأمامية
مقدمة في أداء الواجهة الأمامية
يعد أداء الواجهة الأمامية أمرًا بالغ الأهمية لتجربة المستخدم، وتصنيفات محركات البحث، ومعدلات التحويل. تظهر الدراسات أن تأخيرًا لمدة ثانية واحدة في وقت تحميل الصفحة يمكن أن يؤدي إلى انخفاض بنسبة 7٪ في التحويلات. يجب تحسين تطبيقات الويب الحديثة لتقديم تجارب سريعة وسلسة عبر جميع الأجهزة وظروف الشبكة.
في هذا الدرس الشامل، سنستكشف المفاهيم الأساسية لأداء الواجهة الأمامية، بما في ذلك مسار العرض الحرج، ومقاييس Core Web Vitals، وأدوات قياس الأداء، واستراتيجيات التحسين التي يجب على كل مطور ويب فهمها.
مسار العرض الحرج (Critical Rendering Path)
مسار العرض الحرج هو تسلسل الخطوات التي يتخذها المتصفح لتحويل HTML و CSS و JavaScript إلى بكسلات على الشاشة. فهم هذه العملية أمر أساسي لتحسين أداء الواجهة الأمامية.
خطوات مسار العرض الحرج
- بناء DOM: يقوم المتصفح بتحليل HTML وإنشاء شجرة نموذج كائن المستند (DOM)
- بناء CSSOM: يقوم المتصفح بتحليل CSS وإنشاء شجرة نموذج كائن CSS (CSSOM)
- إنشاء شجرة العرض: يجمع المتصفح بين DOM و CSSOM لإنشاء شجرة العرض
- التخطيط: يحسب المتصفح موضع وحجم كل عنصر
- الرسم: يحول المتصفح شجرة العرض إلى بكسلات على الشاشة
نموذج كائن المستند (DOM)
يمثل DOM بنية مستند HTML الخاص بك كشجرة من العقد. يصبح كل عنصر HTML عقدة في الشجرة، ولا يمكن للمتصفح عرض الصفحة حتى يتم بناء DOM بالكامل.
بناء DOM تدريجي - يمكن للمتصفح بدء التحليل والعرض قبل استلام مستند HTML بالكامل. ومع ذلك، يمكن لـ JavaScript حظر بناء DOM إذا قام بتعديل بنية المستند.
نموذج كائن CSS (CSSOM)
CSSOM مشابه لـ DOM ولكن لـ CSS. إنه يمثل جميع أنماط CSS للصفحة. على عكس DOM، فإن بناء CSSOM يحظر العرض - لا يمكن للمتصفح عرض الصفحة حتى يكتمل CSSOM لأنه يحتاج إلى معرفة جميع الأنماط قبل الرسم.
شجرة العرض والتخطيط
بمجرد أن يصبح كل من DOM و CSSOM جاهزين، يقوم المتصفح بدمجهما لإنشاء شجرة العرض. تحتوي هذه الشجرة فقط على العناصر المرئية مع أنماطها المحسوبة. لا يتم تضمين العناصر ذات display: none في شجرة العرض.
تحسب مرحلة التخطيط (تسمى أيضًا إعادة التدفق) الموضع والحجم الدقيقين لكل عنصر. هذه عملية مكلفة حسابيًا، خاصةً للتخطيطات المعقدة مع العديد من العناصر.
مقاييس Core Web Vitals
Core Web Vitals هي مجموعة من المقاييس التي تستخدمها Google لقياس تجربة المستخدم. هذه المقاييس جزء من إشارات تجربة الصفحة من Google وتؤثر بشكل مباشر على تصنيفات تحسين محركات البحث.
أكبر رسم للمحتوى (LCP)
يقيس LCP أداء التحميل. إنه يحدد الوقت الذي يصبح فيه أكبر عنصر محتوى (صورة أو فيديو أو كتلة نص) مرئيًا في منطقة العرض. درجات LCP الجيدة أقل من 2.5 ثانية.
- تحسين وضغط الصور
- استخدام CDN لتسليم المحتوى بشكل أسرع
- تقليل وقت استجابة الخادم
- إزالة الموارد التي تحظر العرض
- استخدام التحميل الكسول للصور أسفل الطية
تأخير الإدخال الأول (FID) / التفاعل إلى الرسم التالي (INP)
يقيس FID التفاعلية من خلال تتبع التأخير بين تفاعل المستخدم الأول واستجابة المتصفح. تنتقل Google إلى INP، الذي يقيس الاستجابة طوال دورة حياة الصفحة بأكملها. درجات FID الجيدة أقل من 100 مللي ثانية، بينما درجات INP الجيدة أقل من 200 مللي ثانية.
التحول التراكمي للتخطيط (CLS)
يقيس CLS الاستقرار البصري من خلال تتبع التحولات غير المتوقعة في التخطيط أثناء تحميل الصفحة. درجة CLS الجيدة أقل من 0.1. تحدث تحولات التخطيط عندما تتحرك العناصر بعد العرض الأولي، غالبًا بسبب الصور بدون أبعاد أو المحتوى المحقون ديناميكيًا.
- صور بدون سمات العرض/الارتفاع
- إعلانات أو تضمينات بدون مساحة محجوزة
- خطوط الويب التي تسبب إعادة تدفق النص (FOIT/FOUT)
- محتوى محقون ديناميكيًا فوق المحتوى الموجود
عمليات تدقيق أداء Lighthouse
Lighthouse هي أداة آلية مدمجة في Chrome DevTools تدقق صفحات الويب من حيث الأداء وإمكانية الوصول وتحسين محركات البحث والمزيد. توفر درجة أداء (0-100) وتوصيات قابلة للتنفيذ.
تشغيل عمليات تدقيق Lighthouse
- افتح Chrome DevTools (F12 أو Cmd+Option+I)
- انتقل إلى علامة التبويب "Lighthouse"
- حدد فئة "الأداء"
- اختر نوع الجهاز (الجوال/سطح المكتب)
- انقر على "تحليل تحميل الصفحة"
مقاييس Lighthouse الرئيسية
- أول رسم للمحتوى (FCP): الوقت الذي يظهر فيه المحتوى الأول (أقل من 1.8 ثانية جيد)
- مؤشر السرعة: مدى سرعة ملء المحتوى بصريًا (أقل من 3.4 ثانية جيد)
- الوقت إلى التفاعلية (TTI): الوقت حتى تصبح الصفحة تفاعلية بالكامل (أقل من 3.8 ثانية جيد)
- إجمالي وقت الحظر (TBT): الوقت الذي تم فيه حظر الخيط الرئيسي (أقل من 200 مللي ثانية جيد)
- اختبر في وضع التصفح الخفي لتجنب تداخل الإضافات
- اختبر عدة مرات واحسب متوسط النتائج
- اختبر على الجوال وسطح المكتب
- استخدم "Simulated Throttling" لنتائج متسقة
- اختبر في ظروف شبكة مختلفة
ميزانيات الأداء
ميزانية الأداء هي مجموعة من الحدود للمقاييس التي تؤثر على أداء الموقع. تساعد هذه الميزانيات الفرق على اتخاذ قرارات مستنيرة حول ما يجب تضمينه في الصفحة والحفاظ على أوقات تحميل سريعة بمرور الوقت.
أنواع ميزانيات الأداء
- ميزانيات قائمة على المقاييس: حدود للمقاييس مثل LCP و FID و CLS (مثل LCP يجب أن يكون أقل من 2.5 ثانية)
- ميزانيات قائمة على الموارد: حدود لأحجام الموارد (مثل JavaScript أقل من 200 كيلوبايت، الصور أقل من 1 ميغابايت)
- ميزانيات قائمة على القواعد: حدود لعدد الموارد (مثل حد أقصى 10 ملفات JavaScript، 5 ملفات CSS)
تطبيق ميزانيات الأداء
يجب تطبيق ميزانيات الأداء في سير عمل التطوير الخاص بك باستخدام أدوات آلية:
- Lighthouse CI: تشغيل Lighthouse في خط أنابيب CI/CD وفشل البناءات التي تتجاوز الميزانيات
- Webpack Bundle Analyzer: تصور أحجام الحزم وتحديد الانتفاخ
- bundlesize: حزمة npm للتحقق من أحجام الملفات مقابل الحدود
- WebPageTest API: اختبار أداء آلي مع فرض الميزانية
لوحة الأداء في أدوات مطوري المتصفح
توفر لوحة الأداء في Chrome DevTools رؤى مفصلة حول أداء وقت التشغيل، مما يسمح لك بتحديد نقاط الاختناق وتحسين الكود الخاص بك.
استخدام لوحة الأداء
- افتح DevTools وانتقل إلى علامة التبويب "Performance"
- انقر على زر التسجيل (أو Cmd+E / Ctrl+E)
- تفاعل مع صفحتك أو دعها تحمل
- انقر على إيقاف لإنهاء التسجيل
- حلل مخطط اللهب والجدول الزمني
قراءة تسجيلات الأداء
يظهر تسجيل الأداء عدة أقسام رئيسية:
- الجدول الزمني للشبكة: يظهر متى يتم طلب الموارد وتحميلها
- نشاط الخيط الرئيسي: يظهر تنفيذ JavaScript وعمليات التخطيط والرسم
- نشاط GPU: يظهر التركيب والتنقيط
- لقطات الشاشة: الجدول الزمني المرئي لعرض الصفحة
- ابحث عن المهام الطويلة (الكتل الصفراء/الحمراء التي تزيد عن 50 مللي ثانية)
- حدد التخطيطات المتزامنة القسرية (تحذيرات أرجوانية)
- تحقق من تنفيذ JavaScript المفرط
- راقب استخدام الذاكرة للكشف عن التسريبات
- استخدم عروض "Bottom-Up" و "Call Tree" للتحليل التفصيلي
تحديد مشاكل الأداء
الأنماط الشائعة للبحث عنها في لوحة الأداء:
قياس الأداء في الكود
يمكنك قياس الأداء برمجيًا باستخدام Performance API لتتبع تجارب المستخدم الحقيقية وتحديد نقاط الاختناق في الإنتاج.
Performance Timing API
User Timing API
مكتبة Web Vitals
توفر Google مكتبة web-vitals لقياس Core Web Vitals بسهولة في الإنتاج:
استراتيجيات تحسين الأداء
بناءً على المقاييس والقياسات، إليك استراتيجيات التحسين الأساسية:
تحسين مسار العرض الحرج
- تقليل الموارد الحرجة (تضمين CSS الحرج)
- تقليل البايتات الحرجة (الضغط والتصغير)
- تقليل طول المسار الحرج (تقليل التبعيات)
- تأجيل CSS و JavaScript غير الحرجة
تحسين JavaScript
- تقسيم الكود إلى حزم أصغر
- استخدام tree shaking لإزالة الكود غير المستخدم
- تأجيل أو تحميل البرامج النصية غير الحرجة بشكل غير متزامن
- تقليل عمل الخيط الرئيسي
- استخدام Web Workers للحسابات الثقيلة
تحسين الصور
- استخدام التنسيقات الحديثة (WebP، AVIF)
- تطبيق الصور المستجيبة باستخدام srcset
- تحميل كسول للصور أسفل الطية
- ضغط الصور بشكل مناسب
- استخدام CDN لتسليم الصور
- اختر موقعًا قمت ببنائه أو أي موقع عام
- قم بتشغيل تدقيق Lighthouse وسجل درجة الأداء
- استخدم لوحة الأداء لتسجيل تحميل صفحة
- حدد أهم ثلاث مشكلات أداء
- احسب ميزانية أداء بناءً على المقاييس الحالية
- قم بتطبيق مكتبة web-vitals وسجل المقاييس في وحدة التحكم
- قارن LCP و FID و CLS عبر صفحات مختلفة
الملخص
يبدأ تحسين أداء الواجهة الأمامية بفهم مسار العرض الحرج وكيف تحول المتصفحات الكود إلى بكسلات. توفر Core Web Vitals أهدافًا قابلة للقياس لتجربة المستخدم، بينما تساعد أدوات مثل Lighthouse و Chrome DevTools في تحديد وتشخيص مشكلات الأداء.
تضمن ميزانيات الأداء بقاء موقعك سريعًا بمرور الوقت، وتسمح Performance API بقياس تجارب المستخدم الحقيقية في الإنتاج. من خلال إتقان هذه الأساسيات، ستكون مجهزًا لبناء تطبيقات ويب سريعة وسلسة توفر تجارب مستخدم ممتازة وتحتل مرتبة جيدة في محركات البحث.
- فهم مسار العرض الحرج: DOM، CSSOM، شجرة العرض، التخطيط، الرسم
- تحسين لـ Core Web Vitals: LCP أقل من 2.5 ثانية، FID/INP أقل من 100-200 مللي ثانية، CLS أقل من 0.1
- استخدام Lighthouse لعمليات تدقيق أداء شاملة
- تطبيق ميزانيات الأداء وفرضها في CI/CD
- استخدام لوحة الأداء في Chrome DevTools لتحديد نقاط الاختناق
- قياس أداء المستخدم الحقيقي باستخدام Performance API ومكتبة web-vitals