تخطَّ إلى المحتوى

هندسة الأداء في Next.js

عمل على مؤشرات Core Web Vitals في تطبيقات Next.js القائمة — يُقاس ببيانات الميدان، ويُعالَج عند سببه المعماري، ويُدافَع عنه في خطّ التكامل المستمر كي تبقى الأرقام مُصلَحة.

لعمل الأداء نمط فشل معروف: يُنفق فريق دورة تطوير كاملة على التحسين، فتقفز الدرجة، ثم تعود بعد ستة أسابيع إلى ما كانت عليه. لم يكن في الإصلاحات خطأ، بل كان الناقص آليةً تحفظها.

كيف يسير العمل

القياس أولًا، من الميدان. نبدأ ببيانات تقرير Chrome UX وبيانات المراقبة لديكم، مقسّمة حسب فئة الجهاز وقالب المسار. فالقول إنّ قيمة LCP عند الشريحة 75 تبلغ 3.4 ثانية في صفحات المنتجات على الهاتف عبارة قابلة للتنفيذ، أما «درجتنا في Lighthouse هي 62» فليست كذلك.

إيجاد السبب لا العَرَض. بطء LCP هو قرار عرض، أو استراتيجية خطوط، أو خطّ معالجة صور، أو طرف ثالث يحجب المسار الحرج. وضعف INP يعود في الغالب إلى حجم وشكل الـ JavaScript الذي يُرطَّب فوق الطيّة. نتتبّع كل مؤشّر وصولًا إلى القرار المحدّد على مستوى الـ commit الذي أنتجه.

الإصلاح على المستوى المعماري. نقل مكوّن عبر حدّ الخادم، وإزالة جلب بيانات من جهة العميل كان ينبغي أن يكون عرضًا على الخادم، واستبدال مكتبة تواريخ بحجم 300 كيلوبايت، وتقسيم مسار يُرسل حزمة لوحة الإدارة كاملةً إلى زوّار مجهولين. هذه هي التغييرات التي تصمد.

الدفاع عن النتيجة. ينتهي كل عمل بميزانية أداء مفروضة في خطّ التكامل المستمر. أي pull request يدفع حزمة المسار فوق سقفها يُسقط الفحص. الميزانية هي المُخرَج الحقيقي، والدرجة أثر جانبي.

ما الذي تحصلون عليه

وثيقة نتائج مرتّبة بالأولوية، كل مشكلة فيها متتبَّعة إلى سببها ومُقدَّرة بالجهد؛ والإصلاحات المنفَّذة على هيئة pull requests قابلة للمراجعة؛ وإعداد ميزانية التكامل المستمر؛ ومقارنة قبل/بعد على بيانات الميدان بعد أن يمضي على التغيير في الإنتاج ما يكفي لتحريك نافذة الثمانية والعشرين يومًا.

الأسئلة الشائعة

هل تنطلقون من درجات Lighthouse؟
ليست إشارتنا الأساسية. فـ Lighthouse أداة مختبرية مفيدة لإعادة إنتاج المشكلة، لكن الترتيب في نتائج البحث والإيرادات يتبعان بيانات الميدان. نبدأ من تقرير Chrome UX ومن مراقبة المستخدمين الحقيقيين لديكم، ثم نستخدم المختبر لعزل الأسباب.
ماذا لو كانت المشكلة في نظام إدارة المحتوى أو في سكربتات الأطراف الثالثة؟
عندها يكون ذلك هو النتيجة. نسبة كبيرة من تراجعات LCP وINP التي نتتبّعها تنتهي عند مدير وسوم أو أداة محادثة أو خطّ وسائط غير مُحسَّن، لا عند شيفرة التطبيق. نحن نُبلّغ عن السبب الذي نجده، لا عن السبب المريح.
هل تضمنون درجة معيّنة؟
نتّفق معكم على هدف مبنيّ على بيانات الميدان، ونخبركم قبل البدء إن كان بلوغه ممكنًا ضمن المعمارية الحالية. وإن لم يكن ممكنًا، فالجواب الصادق هو إعادة بناء المسار المتأثّر، وسنقول ذلك صراحةً.