Skip to content

Performance Observer

PerformanceObserver lets you listen for performance events as they happen — including long tasks, layout shifts, and other metrics.

Long tasks are tasks that block the main thread for 50ms or more:

const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.warn(`Long task detected: ${entry.duration.toFixed(2)}ms`);
console.warn(`Attribution:`, entry.attribution);
});
});
observer.observe({ entryTypes: ['longtask'] });
const lcpObserver = new PerformanceObserver((list) => {
const entries = list.getEntries();
const lastEntry = entries[entries.length - 1];
console.log(`LCP: ${lastEntry.startTime.toFixed(2)}ms`);
});
lcpObserver.observe({ entryTypes: ['largest-contentful-paint'] });
const fidObserver = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(`FID: ${entry.duration.toFixed(2)}ms`);
console.log(`Input type: ${entry.name}`);
});
});
fidObserver.observe({ entryTypes: ['first-input'] });
const resourceObserver = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
if (entry.duration > 500) {
console.warn(`Slow resource: ${entry.name} (${entry.duration.toFixed(2)}ms)`);
}
});
});
resourceObserver.observe({ entryTypes: ['resource'] });
TypeDescription
longtaskTasks blocking main thread > 50ms
largest-contentful-paintLCP timing
first-inputFID timing
resourceNetwork resource timing
navigationPage navigation timing
paintFirst Paint / First Contentful Paint
layout-shiftCumulative Layout Shift (CLS)
  • PerformanceObserver listens for performance events in real-time
  • Monitor Long Tasks (>50ms), LCP, FID, CLS, and resource timing
  • Essential for measuring Core Web Vitals
  • Disconnect observer when no longer needed