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
سرعت بارگذاری را میسنجد. لحظهای را نشان میدهد که بزرگترین عنصر محتوا (تصویر، ویدیو یا بلوک متن) دیده میشود.
INP — Interaction to Next Paint
پاسخگویی کلی صفحه را میسنجد. همهی تعاملها را زیر نظر میگیرد و بدترین تأخیر را گزارش میکند.
CLS — Cumulative Layout Shift
پایداری بصری را میسنجد. مجموع همهی جابهجاییهای غیرمنتظرهی چیدمان در طول عمر صفحه است.
TTFB
Time to First Byte
زمان پاسخ سرور
خوب: ≤800ms
FCP
First Contentful Paint
سرعت بارگذاری از نگاه کاربر
خوب: ≤1.8s
Next.js#
راهاندازی پایه
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+)
// 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
// 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;گزینههای پیشرفته
// 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 با این ساختار ارسال میشوند:
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
- • تصاویر را بهینه و فشرده کنید
- • برای فایلهای استاتیک از CDN استفاده کنید
- • منابع حیاتی را preload کنید
- • جاوااسکریپتی را که جلوی رندر را میگیرد به حداقل برسانید
بهبود INP
- • taskهای طولانی جاوااسکریپت را بشکنید
- • محاسبات سنگین را به web worker بسپارید
- • event handlerها را بهینه کنید
- • جاوااسکریپت غیرضروری را با تأخیر بارگذاری کنید
بهبود CLS
- • همیشه برای تصاویر ویژگیهای اندازه را بگذارید
- • برای محتوای پویا از قبل جا رزرو کنید
- • محتوا را بالای محتوای موجود اضافه نکنید
- • بهجای تغییر چیدمان از انیمیشنهای transform استفاده کنید
بهترین روشها#
ردیابی Web Vitals را تا جای ممکن زود در چرخهی عمر اپ فعال کنید تا سنجش دقیق باشد
Web Vitals از کاربران واقعی production بیشترین معنا را دارد؛ دادهی محیط توسعه ممکن است گمراهکننده باشد
Web Vitals را برای هر route یا صفحه دنبال کنید تا بفهمید کدام صفحهها بهینهسازی لازم دارند
از روندهای داشبورد استفاده کنید تا ببینید deployها چه اثری روی عملکرد دارند
INP معیار Core Web Vitals برای پاسخگویی است؛ بهبود پاسخگویی را در اولویت بگذارید
هدف را رسیدن به آستانهی «خوب» در صدک ۷۵ام بارگذاری صفحهها بگذارید