> このファイルは [common/performance.md](../common/performance.md) を Web 固有のパフォーマンスコンテンツで拡張します。 # Web パフォーマンスルール ## Core Web Vitals 目標 | メトリクス | 目標 | |-----------|------| | LCP | < 2.5秒 | | INP | < 200ms | | CLS | < 0.1 | | FCP | < 1.5秒 | | TBT | < 200ms | ## バンドルバジェット | ページタイプ | JS バジェット(gzip 圧縮後) | CSS バジェット | |-------------|---------------------------|--------------| | ランディングページ | < 150kb | < 30kb | | アプリページ | < 300kb | < 50kb | | マイクロサイト | < 80kb | < 15kb | ## ローディング戦略 1. 正当な場合、クリティカルなアバブ・ザ・フォールド CSS をインライン化する 2. ヒーロー画像とプライマリフォントのみをプリロードする 3. 非クリティカルな CSS や JS を遅延読み込みする 4. 重いライブラリを動的インポートする ```js const gsapModule = await import('gsap'); const { ScrollTrigger } = await import('gsap/ScrollTrigger'); ``` ## 画像最適化 - 明示的な `width` と `height` - ヒーローメディアのみに `loading="eager"` と `fetchpriority="high"` - ビロウ・ザ・フォールドのアセットには `loading="lazy"` - フォールバック付きで AVIF または WebP を優先する - レンダリングサイズを大幅に超えるソース画像を配信しない ## フォント読み込み - 明確な例外がない限り、フォントファミリーは最大2つ - `font-display: swap` - 可能な場合はサブセット化する - 本当にクリティカルなウェイト/スタイルのみをプリロードする ## アニメーションパフォーマンス - コンポジタフレンドリーなプロパティのみをアニメーションする - `will-change` は狭い範囲で使用し、完了時に削除する - シンプルなトランジションには CSS を優先する - JS モーションには `requestAnimationFrame` または確立されたアニメーションライブラリを使用する - スクロールハンドラの乱発を避ける。IntersectionObserver または行儀の良いライブラリを使用する ## パフォーマンスチェックリスト - [ ] すべての画像に明示的なサイズがある - [ ] 意図しないレンダーブロッキングリソースがない - [ ] 動的コンテンツによるレイアウトシフトがない - [ ] モーションがコンポジタフレンドリーなプロパティにとどまっている - [ ] サードパーティスクリプトが async/defer で読み込まれ、必要な場合のみ使用されている