ابرووا
شروع رایگان
☰ فهرست مستندات · Core Web Vitals

Core Web Vitals

سنجش تجربه‌ی واقعی کاربر در سرعت بارگذاری، پاسخ‌گویی و پایداری بصری با معیارهای LCP، INP، CLS، TTFB و FCP.

به‌روزرسانی: ۵ آبان ۱۴۰۵

Core Web Vitals مجموعه‌ای از معیارهای تعریف‌شده توسط Google است که تجربه‌ی واقعی کاربر را در سرعت بارگذاری، پاسخ‌گویی و پایداری بصری می‌سنجد. این معیارها مستقیم روی رتبه‌ی SEO و رضایت کاربر اثر می‌گذارند. ابرووا تریس برای سنجش دقیق از کتابخانه‌ی رسمی web-vitals گوگل استفاده می‌کند.

فقط مرورگر.

Web Vitals معیارهای مخصوص مرورگر هستند. فعلاً فقط SDK مربوط به Next.js (@abrova-trace/nextjs-sdk) آن‌ها را می‌فرستد. برای اپ‌های موبایل (iOS، Android، Flutter) به‌جای آن از ردیابی تأخیر API استفاده کنید.

توضیح معیارها#

LCP — Largest Contentful Paint

سرعت بارگذاری را می‌سنجد. لحظه‌ای را نشان می‌دهد که بزرگ‌ترین عنصر محتوا (تصویر، ویدیو یا بلوک متن) دیده می‌شود.

خوب
≤2.5s
نیاز به بهبود
2.5–4s
ضعیف
>4s

INP — Interaction to Next Paint

پاسخ‌گویی کلی صفحه را می‌سنجد. همه‌ی تعامل‌ها را زیر نظر می‌گیرد و بدترین تأخیر را گزارش می‌کند.

خوب
≤200ms
نیاز به بهبود
200–500ms
ضعیف
>500ms

CLS — Cumulative Layout Shift

پایداری بصری را می‌سنجد. مجموع همه‌ی جابه‌جایی‌های غیرمنتظره‌ی چیدمان در طول عمر صفحه است.

خوب
≤0.1
نیاز به بهبود
0.1–0.25
ضعیف
>0.25

TTFB

Time to First Byte

زمان پاسخ سرور

خوب: ≤800ms

FCP

First Contentful Paint

سرعت بارگذاری از نگاه کاربر

خوب: ≤1.8s

Next.js#

راه‌اندازی پایه

typescript
import { AbrovaTrace } from '@abrova-trace/nextjs-sdk';

AbrovaTrace.init({
  apiKey: 'ab_live_your_api_key',
  environment: 'production',
  release: '1.0.0',
});

// Enable Web Vitals tracking
// Automatically captures LCP, INP, CLS, TTFB, FCP
AbrovaTrace.getInstance()?.enableWebVitals();

App Router (Next.js 13+)

tsx
// app/providers.tsx
'use client';

import { useEffect } from 'react';
import { AbrovaTrace } from '@abrova-trace/nextjs-sdk';

export function Providers({ children }: { children: React.ReactNode }) {
  useEffect(() => {
    AbrovaTrace.init({
      apiKey: process.env.NEXT_PUBLIC_ABROVA_TRACE_KEY!,
      environment: process.env.NODE_ENV,
    });

    // Enable Web Vitals tracking
    AbrovaTrace.getInstance()?.enableWebVitals();

    // Enable HTTP performance tracking
    AbrovaTrace.getInstance()?.enablePerformanceTracking();

    return () => AbrovaTrace.getInstance()?.close();
  }, []);

  return <>{children}</>;
}

Pages Router

tsx
// pages/_app.tsx
import { useEffect } from 'react';
import { AbrovaTrace } from '@abrova-trace/nextjs-sdk';

function MyApp({ Component, pageProps }) {
  useEffect(() => {
    AbrovaTrace.init({
      apiKey: process.env.NEXT_PUBLIC_ABROVA_TRACE_KEY!,
      environment: process.env.NODE_ENV,
    });

    AbrovaTrace.getInstance()?.enableWebVitals();
    AbrovaTrace.getInstance()?.enablePerformanceTracking();

    return () => AbrovaTrace.getInstance()?.close();
  }, []);

  return <Component {...pageProps} />;
}

export default MyApp;

گزینه‌های پیشرفته

typescript
// Report all metric changes (not just final values)
AbrovaTrace.getInstance()?.enableWebVitals({
  reportAllChanges: true,
});

// Custom batch interval (default: 5000ms): vitals are sent this long after
// the last metric arrives, and also when the page is hidden or unloaded
AbrovaTrace.getInstance()?.enableWebVitals({
  batchInterval: 10000, // 10 seconds
});

ساختار داده#

داده‌های Web Vitals با این ساختار ارسال می‌شوند:

typescript
interface WebVitalsData {
  pageUrl: string;           // Full page URL
  pageRoute?: string;        // Route path (e.g., /dashboard)

  // Core Web Vitals
  lcpMs?: number;            // Largest Contentful Paint
  cls?: number;              // Cumulative Layout Shift
  inpMs?: number;            // Interaction to Next Paint
  ttfbMs?: number;           // Time to First Byte
  fcpMs?: number;            // First Contentful Paint

  // Context
  deviceType?: string;       // 'mobile' | 'tablet' | 'desktop'
  connectionType?: string;   // from Navigator API (4g, 3g, etc.)
  sessionId?: string;        // Per page-load ID from the Web Vitals tracker (not getSessionId())
  platform: 'nextjs';
  environment?: string;      // production, staging
  releaseVersion?: string;   // App version
}

نمای داشبورد#

در کنسول ابرووا، صفحه‌ی ابرووا تریس ← Performance کارت جداگانه‌ای برای Web Vitals دارد: صدک ۷۵ام (p75) هر معیار در بازه‌ی انتخاب‌شده، با رتبه‌ی خوب / نیاز به بهبود / ضعیف بر اساس آستانه‌های بالا.

کارت Core Web Vitals

LCP
1.8s
خوب
INP
120ms
خوب
CLS
0.15
نیاز به بهبود
FCP
1.2s
خوب

بهتر کردن امتیازها#

بهبود LCP

  • • تصاویر را بهینه و فشرده کنید
  • • برای فایل‌های استاتیک از CDN استفاده کنید
  • • منابع حیاتی را preload کنید
  • • جاوااسکریپتی را که جلوی رندر را می‌گیرد به حداقل برسانید

بهبود INP

  • • taskهای طولانی جاوااسکریپت را بشکنید
  • • محاسبات سنگین را به web worker بسپارید
  • • event handlerها را بهینه کنید
  • • جاوااسکریپت غیرضروری را با تأخیر بارگذاری کنید

بهبود CLS

  • • همیشه برای تصاویر ویژگی‌های اندازه را بگذارید
  • • برای محتوای پویا از قبل جا رزرو کنید
  • • محتوا را بالای محتوای موجود اضافه نکنید
  • • به‌جای تغییر چیدمان از انیمیشن‌های transform استفاده کنید

بهترین روش‌ها#

زود فعال کنید

ردیابی Web Vitals را تا جای ممکن زود در چرخه‌ی عمر اپ فعال کنید تا سنجش دقیق باشد

از داده‌ی production استفاده کنید

Web Vitals از کاربران واقعی production بیشترین معنا را دارد؛ داده‌ی محیط توسعه ممکن است گمراه‌کننده باشد

بر اساس route مانیتور کنید

Web Vitals را برای هر route یا صفحه دنبال کنید تا بفهمید کدام صفحه‌ها بهینه‌سازی لازم دارند

در طول زمان دنبال کنید

از روندهای داشبورد استفاده کنید تا ببینید deployها چه اثری روی عملکرد دارند

روی INP تمرکز کنید

INP معیار Core Web Vitals برای پاسخ‌گویی است؛ بهبود پاسخ‌گویی را در اولویت بگذارید

هدف واقع‌بینانه بگذارید

هدف را رسیدن به آستانه‌ی «خوب» در صدک ۷۵ام بارگذاری صفحه‌ها بگذارید

این صفحه مفید بود؟
گزارش مشکل