JS でのツリーシェイキング

Barbara Streisand
リリース: 2025-01-07 12:36:41
オリジナル
908 人が閲覧しました

Tree Shaking in JS

JavaScript でのツリーの揺れを理解する: 完全ガイド

現代の Web 開発の世界では、アプリケーションのパフォーマンスを最適化することが非常に重要です。 JavaScript バンドルの小型化と高速化を実現する強力な手法の 1 つは、ツリー シェイキング です。 Webpack や Rollup などのビルド ツールを使用したことがある場合は、この用語を聞いたことがあるでしょう。しかし、木が揺れるというのは一体何で、どのように機能するのでしょうか?

この詳細なガイドでは、JavaScript におけるツリー シェイキング について調査し、その重要性を理解し、実践的な例を見て、それを効果的に実装する方法を学びます。初心者でも経験豊富な開発者でも、この記事は中心となる概念を理解し、プロジェクトに適用できるように構成されています。


樹木揺れとは何ですか?

ツリー シェイキングは、ビルド プロセス中に JavaScript バンドルから未使用または無効なコードを削除するプロセスです。この用語は、コードの「ツリーをシェイク」し、使用されていないブランチ (コード) を削除するという考えに由来しています。

ツリーシェイクは主にES6 (ES2015)モジュール構文で動作し、インポートとエクスポートの静的構造を提供します。この静的な性質により、バンドラーはコードのどの部分が使用され、どの部分が安全に削除できるかを判断できます。


木の揺れがなぜ重要なのか?

ツリー シェイキングは、Web アプリケーションのパフォーマンスを大幅に向上させることができる重要な最適化手法です。主な利点をいくつか紹介します:

  1. バンドル サイズの縮小: 未使用のコードを削除することで、JavaScript バンドルが小さくなり、読み込み時間が短縮されます。
  2. パフォーマンスの向上: バンドルが小さくなると、ブラウザーで解析、コンパイル、実行するコードが減ります。
  3. 開発者エクスペリエンスの向上: よりクリーンで最適化されたコードベースと、デバッグの容易化。
  4. 帯域幅コストの削減: ファイルが小さいほど帯域幅の消費が削減され、モバイル ユーザーにとって特に有益です。

ツリーシェイクの仕組み

ツリーの揺れは、ES6 モジュールのインポートとエクスポートの 静的解析 に依存します。 使用されていないコードを特定し、ビルドプロセス中に削除します。ツリーシェイキングを有効にするには、次の要件を満たす必要があります:

  1. ES6 モジュール構文:
    ツリーの揺れはインポートとエクスポートでのみ機能します。 CommonJS (require/module.exports) は動的であり、静的に分析できません。

  2. ツリーシェイクサポートを備えたバンドラー:
    Webpack、Rollup、Parcel などのツールは、ツリー シェーキングをサポートしています。

  3. 適切な構成:
    未使用のコードを削除するようにバンドラーが正しく構成されていることを確認してください。


例: 基本的なツリーシェイキングの動作

木の揺れの例を見てみましょう。

ステップ 1: 複数のエクスポートを含むモジュールを作成する

モジュール ファイル 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;
ログイン後にコピー

ステップ 2: 必要なものだけをインポートする

別のファイル main.js では、add 関数のみを使用します。

// main.js
import { add } from './math.js';

console.log(add(5, 3)); // Output: 8
ログイン後にコピー

ステップ 3: コードをバンドルする

Webpack や Rollup などのバンドラーを使用します。ツリーシェイクを有効にすると、未使用の関数 (減算、乗算、除算) が最終バンドルから除外されます。


Webpack を使用したツリーシェイキング

ステップ 1: Webpack をセットアップする

Webpack と Babel をインストールします:

npm install --save-dev webpack webpack-cli babel-loader @babel/core @babel/preset-env
ログイン後にコピー

ステップ 2: Webpack を構成する

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
  },
};
ログイン後にコピー

ステップ 3: Webpack を実行する

ビルド コマンドを実行します:

npx webpack
ログイン後にコピー

Webpack は、減算、乗算、除算などの未使用のエクスポートを最終バンドルから自動的に削除します。


ロールアップによる木の揺れ

Rollup も、優れたツリーシェーク機能で知られる人気のバンドラーです。

ステップ 1: ロールアップをインストールする

ロールアップと Babel をインストールします:

npm install --save-dev rollup @rollup/plugin-babel @rollup/plugin-node-resolve
ログイン後にコピー

ステップ 2: ロールアップを構成する

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'],
    }),
  ],
};
ログイン後にコピー

ステップ 3: ロールアップを実行する

ロールアップ ビルドを実行します:

npx rollup -c
ログイン後にコピー

最終的なバンドルでは、Webpack と同様に、未使用のエクスポートが除外されます。


ツリーの揺れに関する一般的な問題

ツリーのシェイキングは、特定のコーディング方法や設定ミスが原因で失敗することがあります。よくある問題をいくつか示します:

  1. 動的インポート:
    動的インポート (require() や動的 import() など) を使用する場合、バンドラーが静的に分析できないため、ツリーシェイクは機能しません。

  2. 副作用:
    一部のモジュールはインポートするだけでアクションを実行します。
    例:

    // module.js
    console.log('This is a side effect');
    export const example = () => {};
    
    ログイン後にコピー

    package.json で明示的に「副作用なし」とマークしない限り、バンドラーはデフォルトでそのようなインポートを削除しません:

    {
    "sideEffects": false
    }
    
    ログイン後にコピー
  3. モジュール形式が正しくありません:
    依存関係が ES6 モジュール構文をサポートしていることを確認してください。 CommonJS を使用している場合、ツリーシェイキングは機能しません。

  4. デッドコードは削除されませんでした:
    バンドラーの最適化設定 (Webpack の usedExports または Rollup の適切なプラグイン) が有効になっているかどうかを確認します。


効果的なツリーシェイクのためのベストプラクティス

  • モジュラー コードの作成: CommonJS の代わりに ES6 モジュール (インポートおよびエクスポート) を使用します。

  • 副作用をマークする: package.json ファイルで副作用のないモジュールを宣言します。

  • 適切なツールを選択する: ライブラリ開発には Rollup などのバンドラーを使用し、アプリケーションには Webpack を使用します。

  • 依存関係をチェックする: 未使用のコードが含まれる可能性があるため、サードパーティ ライブラリの数を最小限に抑えます。

  • プロダクション モードを有効にする: ツリーのシェイキングは多くの場合、プロダクション モードでのみ実行されます。バンドラーが運用環境に設定されていることを確認してください。


結論

ツリーシェイキングは最新の JavaScript 開発に不可欠なテクニックです。未使用のコードを削除することで、アプリケーションのパフォーマンスが最適化され、バンドル サイズが削減されます。 Webpack や Rollup などのツールを使用すると、ベスト プラクティスに従って ES6 モジュールを使用する限り、ツリー シェークの実装は簡単です。

ツリー シェイキングの仕組みを理解し、その制限に対処することで、効率的でパフォーマンスの高い Web アプリケーションを構築できるようになります。今すぐコードをシェイクして、より高速で無駄のないビルドをお楽しみください!


さらに読む

  • MDN Web ドキュメント: モジュール
  • Webpack ツリーシェイキングガイド
  • ロールアップドキュメント

以上がJS でのツリーシェイキングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート