Clement Yuen
← Back to articles
Performance·Intermediate

Frontend Performance: Understanding LCP, FCP and Render-Blocking Resources

5 Aug 2026 · 8 min read · Intermediate

  • #Performance
  • #WebVitals

Share

Core Web Vitals translate user experience into measurable signals. You do not need to memorize every acronym—you need to know which levers affect first paint and largest content.

FCP — First Contentful Paint

FCP marks when the first text or image is painted. Common blockers:

  • Large synchronous JS on the critical path
  • Render-blocking CSS
  • Slow server / TTFB

Fixes tend to be structural: reduce critical JS, defer non-critical CSS, improve hosting latency.

LCP — Largest Contentful Paint

LCP is usually a hero image, headline block, or primary card. Improve it by:

  • Prioritizing the LCP element (fetchpriority="high" on the true LCP image when appropriate)
  • Reserving size to avoid late layout discovery
  • Avoiding late-discovered fonts that swap the headline late

If your LCP node is a decorative background, reconsider the design—the metric is telling you the wrong element is dominant.

Render-blocking resources

CSS in the critical path delays first paint. JS without defer/type="module" (in classic pages) can block parsing. In modern frameworks:

  • Prefer route-level code splitting
  • Avoid importing large UI kits into the first viewport
  • Load analytics after hydration / on idle when possible

CLS is not LCP, but users notice both

Reserve space for images and embeds. Do not inject banners above content after load without layout reservation.

A practical workflow

  1. Record a field or lab trace
  2. Identify the LCP element
  3. Ask whether that element should be the LCP
  4. Fix discovery, download, or render of that element first

Conclusion

Performance work is diagnostic. Name the metric, name the element, then change the few resources that delay it.

Related Articles