DEV Community

Deepika
Deepika

Posted on

Core Web Vitals: What They Are & How to Improve Your Site’s Performance

Core Web Vitals are a set of key performance metrics defined by Google to measure a website's speed, interactivity, and visual stability. These metrics play a crucial role in providing a good user experience and are essential for SEO rankings.

Tools to Measure Website Performance
Several tools are available to analyze and improve website performance:

  1. Google PageSpeed Insights
  2. Lighthouse (Chrome DevTools)
  3. Web Vitals Chrome Extension
  4. Google Search Console
  5. Core Web Vitals Metrics

1. Largest Contentful Paint (LCP) — Measures Loading Performance

LCP measures the time taken to load and render the largest visible content element (e.g., an image, video, or text block) within the viewport. It is a key indicator of how quickly users perceive a page to load.

Ideal LCP: Less than 2.5 seconds.

How to Optimize LCP

1. Optimize Images

  • Use next-generation image formats such as WebP and AVIF instead of JPEG/PNG.
  • Lazy-load non-critical images using the loading="lazy" attribute.
<img src="image.webp" alt="Lazy Loaded Image" loading="lazy" width="600" height="400">
Enter fullscreen mode Exit fullscreen mode
  • Do not lazy-load above-the-fold images to ensure faster rendering.
  • Use responsive images (srcset) to serve different sizes for different screen resolutions.
<img 
  src="image.jpg" 
  srcset="image-480w.jpg 480w, image-800w.jpg 800w, image-1200w.jpg 1200w"
  sizes="(max-width: 600px) 480px, (max-width: 1200px) 800px, 1200px"
  alt="Responsive image">
Enter fullscreen mode Exit fullscreen mode
  • Enable efficient caching by setting a long cache expiration for static images.

2. Reduce Render-Blocking Resources

  • Minimize CSS and JavaScript blocking by:
    Deferring non-critical JavaScript (defer or async).
    Use defer for scripts that modify the DOM (main.js, app.js).
    Use async for scripts that are independent (analytics.js, ads.js).

  • Removing unused CSS using tools like PurgeCSS.

  • Using Critical CSS for above-the-fold content.

3. Optimize Fonts

  • Preload important fonts for faster rendering.
 <link rel="preload" href="fonts/my-font.woff2" as="font" type="font/woff2" crossorigin="anonymous">
Enter fullscreen mode Exit fullscreen mode
  • Use font-display: swap; to avoid render delays.
@font-face {
  font-family: 'MyCustomFont';
  src: url('/fonts/MyCustomFont.woff2') format('woff2'),
       url('/fonts/MyCustomFont.woff') format('woff');
  font-weight: normal;
  font-style: normal;
  font-display: swap;
}
Enter fullscreen mode Exit fullscreen mode
  • Self-host fonts instead of relying on external services to reduce dependency on third-party networks.

4. Optimize JavaScript Execution

  • Minimize long-running scripts by breaking them into smaller tasks.
  • Avoid excessive DOM manipulations.
  • Defer third-party scripts such as analytics, ads, and social media embeds.

5. Prioritize Above-the-Fold Content

  • Ensure that the LCP element loads first without being delayed by other resources.
  • Avoid dependency on slow third-party scripts for LCP elements.

2. Interaction to Next Paint (INP) — Measures Interactivity

INP (previously FID - First Input Delay) measures the time between a user's first interaction (e.g., clicking a button or link) and the browser's response. It assesses a website's interactivity and responsiveness.

Ideal INP: Less than 200ms.

How to Optimize INP

1. Reduce JavaScript Execution Time

  • Minimize long tasks by breaking them into smaller chunks.
  • Defer non-essential JavaScript (defer or async).
  • Use Web Workers for background tasks to prevent main-thread blocking.

2. Optimize Third-Party Scripts

  • Limit the use of third-party scripts such as ads, social media widgets, and analytics.
  • Load third-party scripts asynchronously.
<script async src="https://www.example.com/"></script>
Enter fullscreen mode Exit fullscreen mode

3. Reduce Main Thread Work

  • Minimize reflows and repaints by optimizing CSS and layout.
  • Use requestIdleCallback() to schedule non-critical tasks.
  • Use efficient JavaScript frameworks, such as React with Concurrent Mode.
  • Use Web Workers for Heavy Computation **Js file**
const worker = new Worker('worker.js');
worker.postMessage({ data: "Heavy Task" });

worker.onmessage = function (event) {
  console.log("Processed result:", event.data);
};
Enter fullscreen mode Exit fullscreen mode

**worker.js**

self.onmessage = function (event) {
  const result = heavyComputation(event.data);
  self.postMessage(result);
};

function heavyComputation(data) {
  // Simulate heavy calculations
  return data + " processed";
}

Enter fullscreen mode Exit fullscreen mode

4. Optimize Event Listeners

  • Avoid heavy computations in input event handlers (keydown, click, etc.). Use passive event listeners for scroll and touch events:
document.addEventListener('scroll', handler, { passive: true });
Enter fullscreen mode Exit fullscreen mode
  • Use debounce to optimize the event listeners
function debounce(func, delay) {
  let timer;
  return function (...args) {
    clearTimeout(timer);
    timer = setTimeout(() => func.apply(this, args), delay);
  };
}

// Example usage: Optimizing an input field event
const searchInput = document.getElementById("search");
searchInput.addEventListener(
  "input",
  debounce((event) => {
    console.log("Search:", event.target.value);
  }, 300)
);

Enter fullscreen mode Exit fullscreen mode

5. Improve Web Performance Techniques

  • Utilize a Content Delivery Network (CDN) for faster content delivery.
  • Enable Gzip/Brotli compression to reduce page size.
  • Reduce DOM size to prevent excessive processing.
  • Minimize the css and js file using gulp/webpack

3. Cumulative Layout Shift (CLS) — Measures Visual Stability

CLS measures unexpected shifts in visible content while a page is loading. It impacts the user experience by ensuring that elements remain visually stable.

Ideal CLS: Less than 0.1.

How to Optimize CLS

1. Set Explicit Width & Height for Images & Videos

  • Always define width and height attributes in <img> and <video> tags to prevent layout shifts.
  • Use aspect-ratio in CSS to reserve space before images load.
img {
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
}
Enter fullscreen mode Exit fullscreen mode

2. Reserve Space for Ads, Embeds, and Iframes

  • Use min-height in CSS to allocate space for ads and iframes.
  • Avoid dynamically inserting ads that push content down.
.ad-slot {
  min-height: 250px; /* Reserve space */
  background: #f0f0f0;
}
Enter fullscreen mode Exit fullscreen mode

3. Avoid Dynamically Injected Content Above Existing Content

  • Avoid banners or pop-ups that push content down.
  • Use position: fixed or position: absolute for pop-ups to prevent layout shifts.

4. Optimize Fonts to Prevent FOUT/FOIT

  • Use font-display: swap; in CSS to prevent text shifts.
  • Preload fonts for faster rendering.
<link rel="preload" href="fonts/my-font.woff2" as="font" type="font/woff2" crossorigin="anonymous">
Enter fullscreen mode Exit fullscreen mode

5. Use Stable Animations & Transitions

  • Avoid animations that cause layout shifts.
  • Use transform: translate() instead of modifying layout properties (width, height, margin).
.animated-element {
  transform: translateY(10px);
  transition: transform 0.3s ease-in-out;
}
Enter fullscreen mode Exit fullscreen mode

Conclusion
Optimizing Core Web Vitals is essential for providing a seamless and engaging user experience. By following these best practices, you can improve your site's performance, enhance user satisfaction, and boost your search engine rankings.

SurveyJS custom survey software

JavaScript UI Libraries for Surveys and Forms

SurveyJS lets you build a JSON-based form management system that integrates with any backend, giving you full control over your data and no user limits. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more.

Learn more

Top comments (0)

Cloudinary image

Optimize, customize, deliver, manage and analyze your images.

Remove background in all your web images at the same time, use outpainting to expand images with matching content, remove objects via open-set object detection and fill, recolor, crop, resize... Discover these and hundreds more ways to manage your web images and videos on a scale.

Learn more

AWS GenAI LIVE!

GenAI LIVE! is a dynamic live-streamed show exploring how AWS and our partners are helping organizations unlock real value with generative AI.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️