現代の Web 開発の世界では、アプリケーションのパフォーマンスを最適化することが非常に重要です。 JavaScript バンドルの小型化と高速化を実現する強力な手法の 1 つは、ツリー シェイキング です。 Webpack や Rollup などのビルド ツールを使用したことがある場合は、この用語を聞いたことがあるでしょう。しかし、木が揺れるというのは一体何で、どのように機能するのでしょうか?
この詳細なガイドでは、JavaScript におけるツリー シェイキング について調査し、その重要性を理解し、実践的な例を見て、それを効果的に実装する方法を学びます。初心者でも経験豊富な開発者でも、この記事は中心となる概念を理解し、プロジェクトに適用できるように構成されています。
ツリー シェイキングは、ビルド プロセス中に JavaScript バンドルから未使用または無効なコードを削除するプロセスです。この用語は、コードの「ツリーをシェイク」し、使用されていないブランチ (コード) を削除するという考えに由来しています。
ツリーシェイクは主にES6 (ES2015)モジュール構文で動作し、インポートとエクスポートの静的構造を提供します。この静的な性質により、バンドラーはコードのどの部分が使用され、どの部分が安全に削除できるかを判断できます。
ツリー シェイキングは、Web アプリケーションのパフォーマンスを大幅に向上させることができる重要な最適化手法です。主な利点をいくつか紹介します:
ツリーの揺れは、ES6 モジュールのインポートとエクスポートの 静的解析 に依存します。 使用されていないコードを特定し、ビルドプロセス中に削除します。ツリーシェイキングを有効にするには、次の要件を満たす必要があります:
ES6 モジュール構文:
ツリーの揺れはインポートとエクスポートでのみ機能します。 CommonJS (require/module.exports) は動的であり、静的に分析できません。
ツリーシェイクサポートを備えたバンドラー:
Webpack、Rollup、Parcel などのツールは、ツリー シェーキングをサポートしています。
適切な構成:
未使用のコードを削除するようにバンドラーが正しく構成されていることを確認してください。
木の揺れの例を見てみましょう。
モジュール ファイル math.js を作成します:
// math.js export const add = (a, b) => a + b; export const subtract = (a, b) => a - b; export const multiply = (a, b) => a * b; export const divide = (a, b) => a / b;
別のファイル main.js では、add 関数のみを使用します。
// main.js import { add } from './math.js'; console.log(add(5, 3)); // Output: 8
Webpack や Rollup などのバンドラーを使用します。ツリーシェイクを有効にすると、未使用の関数 (減算、乗算、除算) が最終バンドルから除外されます。
Webpack と Babel をインストールします:
npm install --save-dev webpack webpack-cli babel-loader @babel/core @babel/preset-env
webpack.config.js ファイルを作成します:
const path = require('path'); module.exports = { mode: 'production', // Enables optimizations like tree shaking entry: './
src/main.js', // Your main JavaScript file output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env'], }, }, }, ], }, optimization: { usedExports: true, // Tells Webpack to identify unused exports }, };
ビルド コマンドを実行します:
npx webpack
Webpack は、減算、乗算、除算などの未使用のエクスポートを最終バンドルから自動的に削除します。
Rollup も、優れたツリーシェーク機能で知られる人気のバンドラーです。
ロールアップと Babel をインストールします:
npm install --save-dev rollup @rollup/plugin-babel @rollup/plugin-node-resolve
rollup.config.js ファイルを作成します:
import babel from '@rollup/plugin-babel'; import resolve from '@rollup/plugin-node-resolve'; export default { input: 'src/main.js', output: { file: 'dist/bundle.js', format: 'es', // Keep the ES module format }, plugins: [ resolve(), babel({ babelHelpers: 'bundled', presets: ['@babel/preset-env'], }), ], };
ロールアップ ビルドを実行します:
npx rollup -c
最終的なバンドルでは、Webpack と同様に、未使用のエクスポートが除外されます。
ツリーのシェイキングは、特定のコーディング方法や設定ミスが原因で失敗することがあります。よくある問題をいくつか示します:
動的インポート:
動的インポート (require() や動的 import() など) を使用する場合、バンドラーが静的に分析できないため、ツリーシェイクは機能しません。
副作用:
一部のモジュールはインポートするだけでアクションを実行します。
例:
// module.js console.log('This is a side effect'); export const example = () => {};
package.json で明示的に「副作用なし」とマークしない限り、バンドラーはデフォルトでそのようなインポートを削除しません:
{ "sideEffects": false }
モジュール形式が正しくありません:
依存関係が ES6 モジュール構文をサポートしていることを確認してください。 CommonJS を使用している場合、ツリーシェイキングは機能しません。
デッドコードは削除されませんでした:
バンドラーの最適化設定 (Webpack の usedExports または Rollup の適切なプラグイン) が有効になっているかどうかを確認します。
モジュラー コードの作成: CommonJS の代わりに ES6 モジュール (インポートおよびエクスポート) を使用します。
副作用をマークする: package.json ファイルで副作用のないモジュールを宣言します。
適切なツールを選択する: ライブラリ開発には Rollup などのバンドラーを使用し、アプリケーションには Webpack を使用します。
依存関係をチェックする: 未使用のコードが含まれる可能性があるため、サードパーティ ライブラリの数を最小限に抑えます。
プロダクション モードを有効にする: ツリーのシェイキングは多くの場合、プロダクション モードでのみ実行されます。バンドラーが運用環境に設定されていることを確認してください。
ツリーシェイキングは最新の JavaScript 開発に不可欠なテクニックです。未使用のコードを削除することで、アプリケーションのパフォーマンスが最適化され、バンドル サイズが削減されます。 Webpack や Rollup などのツールを使用すると、ベスト プラクティスに従って ES6 モジュールを使用する限り、ツリー シェークの実装は簡単です。
ツリー シェイキングの仕組みを理解し、その制限に対処することで、効率的でパフォーマンスの高い Web アプリケーションを構築できるようになります。今すぐコードをシェイクして、より高速で無駄のないビルドをお楽しみください!
以上がJS でのツリーシェイキングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。