تاريخ النشر: 31 آذار (مارس) 2014
إنّ الأساس لكل استراتيجية أداء فعّالة هو القياس الجيد و الأدوات الجيدة. لا يمكنك تحسين ما لا يمكنك قياسه. هذا الدليل الأساليب المختلفة لقياس أداء CRP.
- ينفّذ نهج Lighthouse سلسلة من الاختبارات المبرمَجة على صفحة معيّنة، وينشئ بعد ذلك تقريرًا عن أداء الصفحة في ما يتعلّق بقياس الأداء في الوقت الفعلي. هذا الأسلوب نظرة عامة سريعة وأساسية عالية المستوى حول أداء CRP صفحة معينة محملة في متصفحك، مما يتيح لك اختبارها بسرعة وتكراره وتحسين أدائه.
- يرصد نهج Navigation Timing API مقاييس مراقبة المستخدِمين الفعليين (RUM) . وكما يوحي الاسم، هذه المقاييس مأخوذة من مستخدم حقيقي للتفاعلات مع موقعك وتوفير رؤية دقيقة حول حول أداء CRP في الواقع، حسب ما يختبره المستخدمون على مستوى مجموعة متنوعة حالات الأجهزة والشبكة.
بشكل عام، من الطرق الجيدة استخدام Lighthouse لتحديد فرص تحسين CRP الواضحة، ثم تجهيز الرمز البرمجي باستخدام واجهة برمجة التطبيقات Navigation Timing API لمراقبة أداء تطبيقك في الوقت الفعلي.
تدقيق صفحة باستخدام Lighthouse
Lighthouse هي أداة تدقيق لتطبيقات الويب تُجري سلسلة من الاختبارات على ثم عرض نتائج الصفحة في تقرير موحّد. يمكنك تشغيل Lighthouse كإضافة Chrome أو وحدة NPM، وهو ما يُعدّ مفيداً لدمج Lighthouse مع أنظمة الدمج المستمر.
يمكنك الاطّلاع على تدقيق تطبيقات الويب باستخدام Lighthouse للبدء.
عند تشغيل Lighthouse كإضافة Chrome، تظهر نتائج CRP الخاصة بصفحتك. مثل لقطة الشاشة التالية.
اطّلِع على سلاسل الطلبات المهمة للحصول على مزيد من المعلومات عن نتائج عملية التدقيق هذه.
تجهيز الرمز البرمجي باستخدام واجهة برمجة التطبيقات Navigation Timing API
يتيح لك الجمع بين Navigation Timing API وأحداث المتصفّح الأخرى التي يتمّ بثّها أثناء تحميل الصفحة تسجيل أداء CRP لأي صفحة في العالم الحقيقي.
يتوافق كل تصنيف من التصنيفات في المخطّط السابق مع طابع زمني عالي الدقة يتتبّعه المتصفّح لكل صفحة يحمّلها. في الواقع، نحن نعرض في هذه الحالة تحديدًا جزءًا صغيرًا من الطوابع الزمنية المختلفة. نتخطّى حاليًا كل الطوابع الزمنية المرتبطة بالشبكة، لكننا سنعود إليها في درس مستقبلي.
ماذا تعني هذه الطوابع الزمنية؟
domLoading
: هذا هو الطابع الزمني لبدء العملية بأكملها، ويعني أنّ ال browser على وشك بدء تحليل أوّل وحدات البايت التي تم استلامها من ملف HTML.domInteractive
: يحدّد النقطة عند انتهاء المتصفّح من تحليل الكل قد اكتملت عملية إنشاء HTML وDOM.domContentLoaded
: يشير إلى النقطة التي يكون فيها نموذج DOM جاهزًا ولا تتوفّر أيّ قوائم أسلوب تحظر تنفيذ JavaScript، ما يعني أنّه يمكننا الآن (على الأرجح) إنشاء شجرة العرض.- تنتظر العديد من إطارات عمل JavaScript هذا الحدث قبل بدء تنفيذ منطقها الخاص. لهذا السبب، يسجِّل المتصفّح الطابعَين الزمنيَّين
EventStart
وEventEnd
للسماح لنا بتتبُّع مدّة تنفيذ هذا الإجراء.
- تنتظر العديد من إطارات عمل JavaScript هذا الحدث قبل بدء تنفيذ منطقها الخاص. لهذا السبب، يسجِّل المتصفّح الطابعَين الزمنيَّين
domComplete
: كما يشير الاسم، اكتملت جميع عمليات المعالجة وانتهى تحميل جميع الموارد على الصفحة (الصور وما إلى ذلك). بعبارة أخرى، توقف مؤشر التحميل عن الدوران.loadEvent
: كخطوة أخيرة في كل تحميل صفحة، ينشط المتصفح حدثonload
الذي يمكن أن يؤدي إلى تفعيل منطق إضافي للتطبيق.
تحدّد مواصفات HTML شروطًا محدّدة لكل حدث: حالات تفعيله والشروط التي يجب استيفاؤها وغيرها من الاعتبارات المهمة. لأغراضنا، سنركّز على بعض المعالم الرئيسية ذات الصلة بمسار العرض الحرج:
- يشير
domInteractive
إلى أنّ نموذج العناصر في المستند (DOM) جاهز. - يحدّد
domContentLoaded
عادةً عندما يكون كل من DOM وCSSOM جاهزَين.- إذا لم يكن هناك محلل نحوي يحظر JavaScript، سيتم تشغيل
DOMContentLoaded
مباشرةً بعدdomInteractive
.
- إذا لم يكن هناك محلل نحوي يحظر JavaScript، سيتم تشغيل
- تشير السمة
domComplete
إلى الوقت الذي تكون فيه الصفحة وجميع مواردها الفرعية جاهزة.
<!DOCTYPE html>
<html>
<head>
<title>Critical Path: Measure</title>
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link href="style.css" rel="stylesheet" />
<script>
function measureCRP() {
var t = window.performance.timing,
interactive = t.domInteractive - t.domLoading,
dcl = t.domContentLoadedEventStart - t.domLoading,
complete = t.domComplete - t.domLoading;
var stats = document.createElement('p');
stats.textContent =
'interactive: ' +
interactive +
'ms, ' +
'dcl: ' +
dcl +
'ms, complete: ' +
complete +
'ms';
document.body.appendChild(stats);
}
</script>
</head>
<body onload="measureCRP()">
<p>Hello <span>web performance</span> students!</p>
<div><img src="awesome-photo.jpg" /></div>
</body>
</html>
قد يبدو المثال السابق مخيفًا بعض الشيء عند النظر إليه للمرة الأولى، ولكنّه في الواقع بسيط جدًا. تُسجِّل واجهة برمجة التطبيقات Navigation Timing API جميع الطوابع الزمنية ذات الصلة وينتظر رمزنا بدء حدث onload
، ويُرجى العِلم أنّ حدث onload
يبدأ بعد domInteractive
وdomContentLoaded
وdomComplete
، ويحسب الاختلاف بين الطوابع الزمنية المختلفة.
كل ما قيل وأجرينا، لدينا الآن بعض المعالم الرئيسية المحددة التي يجب تتبعها ووظيفة أساسية لإخراج هذه القياسات. يُرجى العلم أنّه بدلاً من طباعة هذه المقاييس على الصفحة، يمكنك أيضًا تعديل الرمز لإرسال هذه المقاييس إلى خادم إحصاءات (تُجري "إحصاءات Google" ذلك تلقائيًا)، ما يشكّل طريقة رائعة للتتبّع المستمر لأداء صفحاتك وتحديد الصفحات المرشحة التي يمكنها الاستفادة من بعض أعمال التحسين.
ماذا عن "أدوات المطوّرين"؟
على الرغم من أن هذه المستندات تستخدم أحيانًا لوحة شبكة أدوات مطوري البرامج في Chrome توضيح مفاهيم CRP، لأنّ "أدوات مطوري البرامج" غير مناسبة تمامًا لـ CRP لأنّه لا يحتوي على آلية مدمجة لعزل والموارد الحرجة. يمكنك إجراء تدقيق في Lighthouse للمساعدة. تحديد هذه الموارد.