يتم تنشيط هذه الدالة عند اكتمال حساب القيم النهائية لأي من المقاييس على الصفحة. يمكنك استخدامها لتسجيل أي من النتائج في وحدة التحكم أو إرسالها إلى نقطة نهاية معينة.
يتكون كائن metric الذي يتم إرجاعه إلى الدالة من عدد من الخصائص:
id: معرف فريد للمقياس في سياق تحميل الصفحة الحالي
name: اسم المقياس
startTime: الطابع الزمني الأول المسجل لإدخال الأداء بوحدة الميللي ثانية (إذا كان مطبقًا)
value: القيمة، أو المدة بوحدة الميللي ثانية، لإدخال الأداء
يمكنك معالجة جميع نتائج هذه المقاييس باستخدام التسمية web-vital:
export function reportWebVitals(metric) { if (metric.label === 'web-vital') { console.log(metric) // يتم تسجيل كائن المقياس ({ id, name, startTime, value, label }) في وحدة التحكم }}
هناك أيضًا خيار معالجة كل مقياس على حدة:
export function reportWebVitals(metric) { switch (metric.name) { case 'FCP': // معالجة نتائج FCP break case 'LCP': // معالجة نتائج LCP break case 'CLS': // معالجة نتائج CLS break case 'FID': // معالجة نتائج FID break case 'TTFB': // معالجة نتائج TTFB break case 'INP': // معالجة نتائج INP (ملاحظة: INP لا يزال مقياسًا تجريبيًا) break default: break }}
يتم استخدام مكتبة طرف ثالث، web-vitals، لقياس هذه المقاييس. يعتمد توافق المتصفح على المقياس المحدد، لذا راجع قسم دعم المتصفحات لمعرفة المتصفحات المدعومة.
Next.js-route-change-to-render: المدة الزمنية التي تستغرقها الصفحة لبدء العرض بعد تغيير المسار (بوحدة مللي ثانية)
Next.js-render: المدة الزمنية التي تستغرقها الصفحة لإنهاء العرض بعد تغيير المسار (بوحدة مللي ثانية)
يمكنك معالجة جميع نتائج هذه المقاييس باستخدام التسمية custom:
export function reportWebVitals(metric) { if (metric.label === 'custom') { console.log(metric) // يتم تسجيل كائن المقياس ({ id, name, startTime, value, label }) في وحدة التحكم }}
هناك أيضًا خيار معالجة كل مقياس على حدة:
export function reportWebVitals(metric) { switch (metric.name) { case 'Next.js-hydration': // معالجة نتائج الترطيب break case 'Next.js-route-change-to-render': // معالجة نتائج تغيير المسار إلى العرض break case 'Next.js-render': // معالجة نتائج العرض break default: break }}
مع دالة إعادة التوجيه، يمكنك إرسال النتائج إلى أي نقطة نهاية لقياس وتتبع أداء المستخدم الحقيقي على موقعك. على سبيل المثال:
export function reportWebVitals(metric) { const body = JSON.stringify(metric) const url = 'https://example.com/analytics' // استخدم `navigator.sendBeacon()` إذا كان متاحًا، مع التراجع إلى `fetch()`. if (navigator.sendBeacon) { navigator.sendBeacon(url, body) } else { fetch(url, { body, method: 'POST', keepalive: true }) }}
معلومة مفيدة: إذا كنت تستخدم Google Analytics، فإن استخدام قيمة id يمكن أن يسمح لك ببناء توزيعات المقاييس يدويًا (لحساب النسب المئوية، إلخ.)
export function reportWebVitals({ id, name, label, value }) { // استخدم `window.gtag` إذا قمت بتهيئة Google Analytics كما في هذا المثال: // https://github.com/vercel/next.js/blob/canary/examples/with-google-analytics/pages/_app.js window.gtag('event', name, { event_category: label === 'web-vital' ? 'Web Vitals' : 'Next.js custom metric', value: Math.round(name === 'CLS' ? value * 1000 : value), // يجب أن تكون القيم أعدادًا صحيحة event_label: id, // معرف فريد لتحميل الصفحة الحالي non_interaction: true, // يتجنب التأثير على معدل الارتداد. })}