Perf Web Optimization

作者 tech-leads-club120b67676388無授權條款收錄於 2026年10月8日更新於 2026年10月8日

Optimize web performance: bundle size, images, caching, lazy loading, and overall page speed. Use when site is slow, reducing bundle size, fixing layout shifts, improving Time to Interactive, or optimizing for Lighthouse scores. Triggers on: web performance, bundle size, page speed, slow site, lazy loading. Do NOT use for Core Web Vitals-specific fixes (use core-web-vitals), running Lighthouse audits (use perf-lighthouse), or Astro-specific optimization (use perf-astro).

AI 產生的概覽

指導系統化地最佳化網頁效能,涵蓋打包體積、圖片、字型、快取與延遲載入。

功能
提供「量測—辨識—排序—實作—驗證」的流程來提升頁面速度,並給出 LCP、INP、CLS 和 TTFB 的目標指標門檻。它包含圖片、字型、第三方指令碼和關鍵 CSS 的快速最佳化模式,以及打包分析指令、程式碼分割範例和快取標頭建議。另提供檢查清單,並指向 Core Web Vitals、打包最佳化和圖片最佳化的參考檔案。
適用情境
適用於網站變慢,或需要縮小打包體積、修正版面位移、改善可互動時間、最佳化 Lighthouse 分數時。不適用於專門修正 Core Web Vitals、執行 Lighthouse 稽核或 Astro 專屬最佳化。
執行需求
不需要指令碼,僅提供說明和參考文件。打包分析範例假設使用 Node.js 工具,例如 webpack-bundle-analyzer、vite-bundle-visualizer 或 bundlephobia,但這些都是選用。

Web Performance Optimization

Systematic approach: Measure → Identify → Prioritize → Implement → Verify.

Target Metrics

MetricGoodNeeds WorkPoor
LCP< 2.5s2.5-4s> 4s
INP< 200ms200-500ms> 500ms
CLS< 0.10.1-0.25> 0.25
TTFB< 800ms800ms-1.8s> 1.8s

Quick Wins

1. Images (usually biggest impact on LCP)

html
<!-- Hero/LCP image: eager + high priority --><img src="/hero.webp" alt="Hero" width="1200" height="600" loading="eager" fetchpriority="high" decoding="async" />
<!-- Below fold: lazy load --><img src="/product.webp" alt="Product" width="400" height="300" loading="lazy" decoding="async" />

Always set width and height to prevent CLS.

2. Fonts (common LCP/CLS culprit)

html
<!-- Preconnect to font origin --><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<!-- Non-blocking font load --><link  rel="stylesheet"  href="https://fonts.googleapis.com/css2?family=Inter&display=swap"  media="print"  onload="this.media='all'"/>

3. Third-party Scripts (common INP killer)

html
<!-- Defer to user interaction --><script>  function loadThirdParty() {    // Load analytics, chat widgets, etc.  }  ;['scroll', 'click', 'touchstart'].forEach((e) => addEventListener(e, loadThirdParty, { once: true, passive: true }))  setTimeout(loadThirdParty, 5000)</script>

4. Critical CSS

Inline critical CSS in <head>, defer the rest:

html
<style>  /* critical styles */</style><link rel="preload" href="/styles.css" as="style" onload="this.rel='stylesheet'" />

Bundle Analysis

bash
# Webpacknpx webpack-bundle-analyzer dist/stats.json
# Vitenpx vite-bundle-visualizer
# Check package size before installingnpx bundlephobia <package-name>

Common heavy packages to replace:

  • moment (67KB) → date-fns (12KB) or dayjs (2KB)
  • lodash (72KB) → cherry-pick imports or native methods

Code Splitting Patterns

javascript
// React lazyconst Chart = lazy(() => import('./Chart'))
// Next.js dynamicconst Admin = dynamic(() => import('./Admin'), { ssr: false })
// Vite/Rollup manual chunksbuild: {  rollupOptions: {    output: {      manualChunks: {        vendor: ['react', 'react-dom']      }    }  }}

Caching Headers

# Static assets (immutable hash in filename)Cache-Control: public, max-age=31536000, immutable
# HTML (revalidate)Cache-Control: no-cache
# API responsesCache-Control: private, max-age=0, must-revalidate

Measurement

For running audits, reading reports, and setting budgets, use the perf-lighthouse skill.

Checklist

Images

  • Modern formats (WebP/AVIF)
  • Responsive srcset
  • width/height attributes
  • loading="lazy" below fold
  • fetchpriority="high" on LCP image

JavaScript

  • Bundle < 200KB gzipped
  • Code splitting by route
  • Third-party scripts deferred
  • No unused dependencies

CSS

  • Critical CSS inlined
  • Non-critical CSS deferred
  • No unused CSS

Fonts

  • font-display: swap
  • Preconnect to font origin
  • Subset if possible

Detailed Examples

For in-depth optimization patterns, see:

  • references/core-web-vitals.md [blocked] - Fixing LCP, CLS, INP issues
  • references/bundle-optimization.md [blocked] - Reducing JS bundle size
  • references/image-optimization.md [blocked] - Image formats, responsive images, sharp scripts

來源與署名

來源:tech-leads-club/agent-skills位於packages/skills-catalog/skills/(performance)/perf-web-optimization提交120b676

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架