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
- Record a field or lab trace
- Identify the LCP element
- Ask whether that element should be the LCP
- 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.