JavaScriptのバンドルサイズを70%削減する方法
ほとんどのWebアプリケーションは、過剰なコードを配信しています。平均的なWebページでは1.7 MBのJavaScriptが読み込まれていますが、開発者がデプロイしたコードのうち、実際に使用されているのはわずか約35%に過ぎません。
バンドルサイズを小さくすることで、Core Web Vitalsが改善されます。Largest Contentful Paint (LCP) や Time to Interactive (TTI) のスコアが向上し、より高速になります。
バンドルサイズを縮小するための10のステップは以下の通りです:
- Tree shaking: 未使用のコードを削除します。これを機能させるには、ES Module構文を使用してください。
- Code splitting: コードをより小さな断片に分割します。
- Dynamic imports: ユーザーが必要としたときにのみコードを読み込みます。
- Image optimization: 重いライブラリの代わりに、URLベースの変換を使用します。
- Dependency auditing: 重いライブラリを軽量なものに置き換えます。
- Minification: コードファイルを圧縮します。
- Compression: Gzipよりも優れた結果を得るためにBrotliを使用します。
- Dead code elimination: 到達不能なコードの分岐を削除します。
- Lazy loading: 非クリティカルなコンポーネントの読み込みを遅らせます。
- Polyfill pruning: ユーザーが必要とするポリフィルのみを配信します。
3つの手法を組み合わせるのが最も効果的です。Lazy loading、polyfill pruning、dead code eliminationを組み合わせることで、サイズを15〜30%削減できます。
依存関係をインストールする前に監査を行いましょう。サイズを確認するには npx bundle-phobia を使用してください。
例:
• date-fns (13KB) は moment.js (67KB) よりも優れています。
• dayjs (2KB) は日付フォーマットの優れた代替手段です。
• フル版の lodash ライブラリの代わりに lodash-es を使用してください。
以下の目標値で進捗を確認してください: • 合計JSサイズ: 120 KB未満を目指します。 • LCP: 2.5秒未満を目指します。 • TTI: 3.5秒未満を目指します。
次のような間違いを避けましょう: • プロダクションビルドではなく、開発用ビルドをデプロイしてしまう。 • 1つの関数しか必要ないのに、ライブラリ全体をインポートしてしまう。 • サーバーでBrotli圧縮を有効にするのを忘れる。
Tree shaking、code splitting、dependency auditingを活用すれば、1スプリントでペイロードを50〜70%削減できます。
出典: https://dev.to/kui_luo/how-to-reduce-your-javascript-bundle-size-by-70-in-10-steps-3j1g