【つりーしぇいきんぐ】
Tree Shaking とは?
最終更新:
💡 「使わない枝」を振り落とす
バンドルを作るとき、使われていないコードのうち安全に除去できるものを省く最適化。JavaScriptではES Modulesの静的なimport/exportを手がかりにする。
📌 このページのポイント
具体的にどういう効果があるの?
例えば足し算と掛け算をexportするファイルから足し算だけを使うなら、使わない掛け算を省けることがあるよ。削減量は元のコードや配布形式、設定によるので、特定のライブラリが必ず何KBになるとはいえないんだ
なぜES Modulesだと解析しやすいの?
import/exportの対応を、コードを実行する前に調べやすいからだよ。ただしCommonJSでは絶対にできないわけではない。webpack 5は、一部のexportsの代入やrequireの使い方も解析する。動的な処理は判断が難しく、除去範囲には限界があるんだ
名前付きインポートを使えば必ず小さくなる?
sideEffectsって何?
コード分割とは違うの?
Tree Shakingは不要なコードを省くこと。コード分割は読み込むファイルを分けることだよ。必要なコードを遅れて読み込むだけでは、未使用コードを除去したことにはならない。両方を組み合わせる場合もあるんだ
まとめ:ざっくりこれだけ覚えればOK!
「Tree Shaking」って出てきたら「使っていないコードをバンドルから除去する最適化」と思えればだいたいOK!
📖 おまけ:英語の意味
「Tree Shaking」 = 木を揺する
💬 依存関係のツリー(木)をShake(揺する)と、使われていない枝(コード)が落ちる、というイメージだよ