全体 node_modules を除外 sourcesContent true false mainfields デフォルト [`main`, `module`] module優先 [`module`, `main`] minify false true external デフォルト(除外なし) aws sdk 未使用機能 を除外 バンドルサイズ 14.5 MB 8.0 MB 5.8 MB 4.8 MB 3.2 MB 3.0 MB コールドスタート min 2732 ms 2499 ms 2355 ms 2179 ms 2138 ms 2086 ms p50 2921 ms 2687 ms 2543 ms 2424 ms 2333 ms 2278 ms p75 3238 ms 2878 ms 2706 ms 2638 ms 2495 ms 2463 ms p99 3487 ms 3053 ms 2890 ms 2852 ms 2700 ms 2681 ms max 3528 ms 3104 ms 2998 ms 2951 ms 2760 ms 2721 ms 今回紹介する5つの設定により p99 で 806 ms 短縮できた
全体 node_modules を除外 sourcesContent true false mainfields デフォルト [`main`, `module`] module優先 [`module`, `main`] minify false true external デフォルト(除外なし) aws sdk 未使用機能 を除外 バンドルサイズ 14.5 MB 8.0 MB 5.8 MB 4.8 MB 3.2 MB 3.0 MB コールドスタート min 2732 ms 2499 ms 2355 ms 2179 ms 2138 ms 2086 ms p50 2921 ms 2687 ms 2543 ms 2424 ms 2333 ms 2278 ms p75 3238 ms 2878 ms 2706 ms 2638 ms 2495 ms 2463 ms p99 3487 ms 3053 ms 2890 ms 2852 ms 2700 ms 2681 ms max 3528 ms 3104 ms 2998 ms 2951 ms 2760 ms 2721 ms SourceMap は遅いので削れ! ESM 版ライブラリを使え! 不要ファイルをバンドルから追い出せ! minify も効果あり! 個別具体の紹介はスライドの補足資料に
全体 node_modules を除外 sourcesContent true false mainfields デフォルト [`main`, `module`] module優先 [`module`, `main`] minify false true external デフォルト(除外なし) aws sdk 未使用機能 を除外 バンドルサイズ 14.5 MB 8.0 MB 5.8 MB 4.8 MB 3.2 MB 3.0 MB コールドスタート min 2732 ms 2499 ms 2355 ms 2179 ms 2138 ms 2086 ms p50 2921 ms 2687 ms 2543 ms 2424 ms 2333 ms 2278 ms p75 3238 ms 2878 ms 2706 ms 2638 ms 2495 ms 2463 ms p99 3487 ms 3053 ms 2890 ms 2852 ms 2700 ms 2681 ms max 3528 ms 3104 ms 2998 ms 2951 ms 2760 ms 2721 ms SourceMap は、元ソースと対応したス タックトレースを出したりしてくれる デバッグのための仕組み Node.js は SourceMap 有効にすると起 動が遅くなる リリースして間もないので問題調査用 に SourceMap は欲しいが、 node_modules までは過剰なので除外
全体 node_modules を除外 sourcesContent true false mainfields デフォルト [`main`, `module`] module優先 [`module`, `main`] minify false true external デフォルト(除外なし) aws sdk 未使用機能 を除外 バンドルサイズ 14.5 MB 8.0 MB 5.8 MB 4.8 MB 3.2 MB 3.0 MB コールドスタート min 2732 ms 2499 ms 2355 ms 2179 ms 2138 ms 2086 ms p50 2921 ms 2687 ms 2543 ms 2424 ms 2333 ms 2278 ms p75 3238 ms 2878 ms 2706 ms 2638 ms 2495 ms 2463 ms p99 3487 ms 3053 ms 2890 ms 2852 ms 2700 ms 2681 ms max 3528 ms 3104 ms 2998 ms 2951 ms 2760 ms 2721 ms デフォルトのSourceMap は行 番号などの位置情報に加え 「ソースコードそのもの」を 含んでいる。デバッガーで使 われる AWS Lambda のような FaaS ではリモートデバッガーは使 えないので不要 metafile: true, sourcemap: 'inline', + sourcesContent: false,
全体 node_modules を除外 sourcesContent true false mainfields デフォルト [`main`, `module`] module優先 [`module`, `main`] minify false true external デフォルト(除外なし) aws sdk 未使用機能 を除外 バンドルサイズ 14.5 MB 8.0 MB 5.8 MB 4.8 MB 3.2 MB 3.0 MB コールドスタート min 2732 ms 2499 ms 2355 ms 2179 ms 2138 ms 2086 ms p50 2921 ms 2687 ms 2543 ms 2424 ms 2333 ms 2278 ms p75 3238 ms 2878 ms 2706 ms 2638 ms 2495 ms 2463 ms p99 3487 ms 3053 ms 2890 ms 2852 ms 2700 ms 2681 ms max 3528 ms 3104 ms 2998 ms 2951 ms 2760 ms 2721 ms metafile: true, + mainFields: ['module', 'main'], sourcemap: 'inline', ESM(ES Module)版ライブラリを 使うと、不要なコードを削除し て、起動を短縮できる ライブラリの package.json で “main” が CommonJS 版のファイ ル、”module” が ESM 版を表す 歴史的事情から、esbuild はデフォ では main を優先する。そこで module(ESM)を優先する
全体 node_modules を除外 sourcesContent true false mainfields デフォルト [`main`, `module`] module優先 [`module`, `main`] minify false true external デフォルト(除外なし) aws sdk 未使用機能 を除外 バンドルサイズ 14.5 MB 8.0 MB 5.8 MB 4.8 MB 3.2 MB 3.0 MB コールドスタート min 2732 ms 2499 ms 2355 ms 2179 ms 2138 ms 2086 ms p50 2921 ms 2687 ms 2543 ms 2424 ms 2333 ms 2278 ms p75 3238 ms 2878 ms 2706 ms 2638 ms 2495 ms 2463 ms p99 3487 ms 3053 ms 2890 ms 2852 ms 2700 ms 2681 ms max 3528 ms 3104 ms 2998 ms 2951 ms 2760 ms 2721 ms metafile: true, + minify: true, minify は識別子短縮、短い構文への書換な どでファイルを軽量化する設定。DL 速度が 重要なモバイルで効果大 Lambda 起動の高速化にも効果が見られた ドキュメントによれば「性能向上につながる 手法の多くが未実装」今後にさらに期待 https://esbuild.github.io/api/#minify
全体 node_modules を除外 sourcesContent true false mainfields デフォルト [`main`, `module`] module優先 [`module`, `main`] minify false true external デフォルト(除外なし) aws sdk 未使用機能 を除外 バンドルサイズ 14.5 MB 8.0 MB 5.8 MB 4.8 MB 3.2 MB 3.0 MB コールドスタート min 2732 ms 2499 ms 2355 ms 2179 ms 2138 ms 2086 ms p50 2921 ms 2687 ms 2543 ms 2424 ms 2333 ms 2278 ms p75 3238 ms 2878 ms 2706 ms 2638 ms 2495 ms 2463 ms p99 3487 ms 3053 ms 2890 ms 2852 ms 2700 ms 2681 ms max 3528 ms 3104 ms 2998 ms 2951 ms 2760 ms 2721 ms AWS SDK の ESM 版を使っても、tree shaking で削除しきれない未使用機能がバン ドルに入ってしまう そこで「使っていない機能はバンドル外から 読み込みますよ」と宣言する(実際には使わ ないので読み込まれない)ことで、未使用機 能を追い出す。一定の改善が見られる