【こーどぶんかつ】

コード分割 とは?

💡 巨大なJSファイルを「小分け」にする
📌 このページのポイント
コード分割:バンドル戦略の比較 分割なし bundle.js 2.5 MB 全コードを一括読み込み ⏱ 初期表示 5秒… 分割あり main.js(200KB)初期表示 page-a.js(150KB)遷移時 page-b.js(180KB)遷移時 vendor.js(300KB)共通 ⏱ 初期表示 1秒! 必要なコードだけを必要なタイミングで読み込む
コード分割のイメージ
ひよこ ひよこ

なぜコード分割が必要なの?

ペンギン先生 ペンギン先生

SPAは全画面のコードを1つのJSファイルにバンドルすることがある。管理画面のコードを含めて2MBのJSを最初にダウンロードさせると、ログインページの表示に5秒かかるかも。コード分割で「ログインページのコードだけ」を先に読み込めば数百KBで済むんだよ

ひよこ ひよこ

どうやって分割するの?

ペンギン先生 ペンギン先生

①ルートベース分割(ページごとに分割):React Routerの各ページをReact.lazy()で読み込む。②コンポーネントベース分割:重いモーダルやチャートをdynamic importする。③ベンダー分割:node_modulesを別チャンクにする。Viteやwebpackは設定次第で自動的にチャンク分割してくれるよ

ひよこ ひよこ

分割しすぎるとダメ?

ペンギン先生 ペンギン先生

分割しすぎるとHTTPリクエスト数が増えてオーバーヘッドが生じる。HTTP/2以降はリクエストの多重化ができるから影響は小さいけど、数百チャンクに分割するのはやりすぎ。ページ単位の分割+大きなライブラリの分割くらいがバランスが良いよ。バンドルアナライザーで実際のサイズを見ながら判断しようね

ひよこ ひよこ

Tree Shakingとの違いは?

ペンギン先生 ペンギン先生

コード分割は「必要な時に読み込む(遅延)」、Tree Shakingは「不要なコードを削除する(除去)」。complementary(補完的)な関係。まずTree Shakingで使われていないコードを除去して、残ったコードをCode Splittingで小分けにする。両方合わせて使うことでバンドルサイズを最小化できるんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「コード分割」って出てきたら「JSバンドルを小分けにして必要な時に読み込む技術」と思えればだいたいOK!
📖 おまけ:英語の意味
「Code Splitting」 = コード分割
💬 Split(分割する)。1つの巨大ファイルを複数のチャンク(塊)に分けるよ
← 用語集にもどる