Astro Performance Skill
Purpose
Achieve 90+ Lighthouse scores and pass Core Web Vitals. Direct impact on SEO rankings and conversion rates.
Core Rules
- •Preload LCP elements (hero images/text) with fetchpriority="high"
- •Set explicit dimensions on all images and iframes to prevent CLS
- •Use font-display: swap for all web fonts
- •Self-host fonts and subset to reduce file size
- •Defer third-party scripts until after load or user interaction
- •Break up long tasks to keep INP under 200ms
- •Use AVIF/WebP formats with responsive images
- •Keep JS bundle under 100KB gzipped
- •Implement edge caching with long cache headers for assets
- •Monitor real user metrics with web-vitals library
Core Web Vitals Targets
| Metric | Good | Needs Improvement | Poor |
|---|---|---|---|
| LCP (Largest Contentful Paint) | ≤2.5s | 2.5-4s | >4s |
| INP (Interaction to Next Paint) | ≤200ms | 200-500ms | >500ms |
| CLS (Cumulative Layout Shift) | ≤0.1 | 0.1-0.25 | >0.25 |
Bundle Size Budgets
| Asset Type | Budget |
|---|---|
| Total JS | <100KB (gzipped) |
| Total CSS | <50KB (gzipped) |
| Hero image | <200KB |
| Any single image | <100KB |
References
Core Web Vitals
- •LCP Optimization - Hero images, preloading, server response
- •CLS Prevention - Dimensions, skeletons, font display
- •INP Optimization - Task chunking, debouncing, content-visibility
Assets & Resources
- •Bundle Size - Analysis, tree shaking, dynamic imports
- •Fonts - Self-hosting, subsetting, variable fonts
- •Images - Format priority, responsive images
Infrastructure
- •Third-Party Scripts - GTM, facades, loading attributes
- •Caching - Cloudflare headers, cache control
- •Testing - Lighthouse, WebPageTest, real user monitoring
Forbidden
- •Render-blocking CSS in body
- •Synchronous third-party scripts in head
- •Unoptimized images
- •Web fonts without
font-display: swap - •Layout shifts from dynamic content
- •Main thread blocking >50ms
Definition of Done
- • Lighthouse Performance ≥90
- • LCP ≤2.5s
- • CLS ≤0.1
- • INP ≤200ms
- • Total JS <100KB gzipped
- • Hero image preloaded
- • Fonts self-hosted with swap
- • Third-party scripts deferred