X Akirapapa Watchsummaries · diagrams
Back to gallery
SUMMARYPerformance2026年5月22日4 views

バンドルを半分に削った実話 ─ 412kb → 203kb のリアル

計測 → 削減 → 計測のループで、初期バンドルを 50% 削った話。何を残して何を捨てたか、効いた打ち手だけを並べる。

A
akirapapa@akirapapa
View on X

出発点

  • 初期バンドル: 412kb (gzip)
  • LCP: 3.8s (mobile 4G)
  • ユーザ離脱: トップで 32%

やったこと(効いた順)

1. 重い依存の置換 (-87kb)

  • moment.jsdate-fns
  • lodash → 個別 import (lodash-es/debounce 等)
  • chart.jsdynamic import で遅延化

2. ルート分割 (-58kb)

管理画面のコードが公開ページのバンドルに混入していた。next/dynamic で分離。

const Editor = dynamic(() => import('./Editor'), { ssr: false });

3. 不要な polyfill (-32kb)

browserslist を絞った。IE 系のレガシーは別ビルドに分離。

4. アイコンのツリーシェイク (-28kb)

react-icons を全部入れていた → lucide-react の個別 import に変更。

5. 画像と CSS の見直し (-4kb)

誤差レベルだが、ついで。

結果

指標BeforeAfterΔ
Bundle (gzip)412kb203kb-50.7%
LCP (4G)3.8s1.9s-50%
直帰率32%24%-8pt

学び

計測しないと、何を消していいのか分からないnext build --analyze を 30 分眺めるだけで、半分以上の改善余地は見つかる。

#Performance#Webpack#Vite#Bundle

/ Related

関連する投稿

All →