prefetchPlugin&analyzeツールを使用してWebpackのビルド時間を最適化するにはどうすればよいですか?


96

これまでの研究:

webpackのwikiが言うように、分析ツールを使用してビルドのパフォーマンスを最適化することが可能です。

から:https : //github.com/webpack/docs/wiki/build-performance#hints-from-build-stats

ビルド統計からのヒント

ビルドを視覚化し、ビルドサイズとビルドパフォーマンスを最適化する方法についてのヒントを提供する分析ツールがあります。

webpack --profile --json> stats.jsonを実行して、必要なJSONファイルを生成できます


私は(統計情報ファイルを生成し、ここで利用可能)のWebPACKのanalizeツールにアップロード
し、下のヒントのタブ私はprefetchPluginを使用するように言わ:

から:http : //webpack.github.io/analyse/#hints

長いモジュール構築チェーン

プリフェッチ使用して、ビルドのパフォーマンスを向上させます。チェーン途中からモジュールをプリフェッチします。


prefechPluginで利用できる唯一のドキュメントは次のとおりです。

から:https : //webpack.js.org/plugins/prefetch-plugin/

PrefetchPlugin

new webpack.PrefetchPlugin([context], request)

通常のモジュールに対する要求。これは、モジュールが必要になる前に解決され、ビルドされます。これにより、パフォーマンスが向上します。最初にビルドのプロファイルを作成して、先読みの賢いポイントを特定してください



私の質問:

  • prefetchPluginを適切に使用するにはどうすればよいですか?
  • 分析ツールで使用する適切なワークフローは何ですか?
  • prefetchPluginが機能するかどうかを確認するにはどうすればよいですか?どうすれば測定できますか?
  • チェーンの途中からモジュールプリフェッチするとはどういう意味ですか?

いくつかの例を本当に感謝します

この質問を、prefechPluginと分析ツールを使用したい次の開発者にとって貴重なリソースにするのを手伝ってください。ありがとうございました。


統計分析ツールをどのように使用するのですか?[アップロード]をクリックしても何も起こらず、送信ボタンもありません。「使用例」のみ
TetraDev 2016年

Uncaught SyntaxError: Unexpected token r in JSON at position 0stats.jsonをアップロードするとコンソール出力に表示される
TetraDev

1
@TetraDevこれは、JSONファイルにエラーがあることを意味します。テキストエディタで開いてみて、有効なJSONのように見えないものがないか確認してください。(最初の行のWebpackからのデバッグ出力で同じ問題があります)。
maufl 2016年

ドキュメントにはあります> stats.jsonが、上部に余分な数行が書き込まれ、パーサーが壊れます
Alex Riina

回答:


35

ええ、プリフェッチプラグインのドキュメントはほとんど存在しません。それを自分で考え出した後、使い方はかなり簡単で、柔軟性はあまりありません。基本的には、コンテキスト(オプション)とモジュールパス(コンテキストに対する相対)の2つの引数を取ります。あなたのケースのコンテキストは、/absolute/path/to/your/project/node_modules/react-transform-har/スクリーンショットのチルダがnode_moduleswebpackのnode_module resolutionに従って参照していると想定しています。

実際のプリフェッチモジュールは、モジュールの依存関係の深さが3を超えないことが理想的です。したがって、あなたの場合isFunction.jsは長いビルドチェーンを持つモジュールであり、理想的には次の場所でプリフェッチする必要がありますgetNative.js

ただし、ビルドチェーンの依存関係がモジュールの依存関係を参照しているため、構成にファンキーなものがあると思います。これは、webpackによって自動的に最適化される必要があります。どのようにして取得したかはわかりませんが、私たちの場合、node_modulesの長いビルドチェーンに関する警告は表示されません。私たちの長いビルドチェーンのほとんどは、scssを必要とする深くネストされたreactコンポーネントによるものです。つまり:

ここに画像の説明を入力してください

いずれにしても、次のように、警告ごとに新しいプラグインを追加する必要があります。

plugins: [
    new webpack.PrefetchPlugin('/web/', 'app/modules/HeaderNav.jsx'),
    new webpack.PrefetchPlugin('/web/', 'app/pages/FrontPage.jsx')
];

2番目の引数は、モジュールの相対位置を表す文字列でなければなりません。これが理にかなっているといいのですが。


私は自分のビルドのいくつかをダウンさせようとしていますが、説明を行った後でも、このツールの使用方法についてはまだ混乱しています。正確に「コンテキスト」の意味と、プリフェッチの各パラメーターが何である必要があるかを詳しく説明できますか?プラグインで正確に何が行われているのか
わかりません

これはしばらく使用していませんが、おそらく同じです。プラグインには2つの引数しかありません。例えばのでモジュールの文脈で一、コンテキストは、app/components/module.jsxあろう'app'、すなわち、私は第二の相対的な位置であるべきだと思う'components/module.jsx'
4m1r

1
わかりました。別のパスがあります。私は少なくとも20のPrefetchPluginの配置を試しましたが、長いビルドチェーンからそれを削除するものはないようです。私が実際に長いビルドチェーンにあるノードモジュールがあり、それをプリフェッチしようとしているところに、ポスターと同じ問題があります。たぶん、webpackがこの状況に対処する方法を知らないのかどうかはわかりません。
ThrowsException 2016年

プリフェッチプラグインを使用して、handlebars.jsを使用するプロジェクトのパフォーマンスを大幅に向上させました。これが私のために働いた構文です:new webpack.PrefetchPlugin(__dirname + "/node_modules", "handlebars/runtime.js"),
Andre

また、プリフェッチしたいものがパッケージではない場合(つまり、にないnode_modules場合)、リクエスト文字列を渡すだけで済みます。最初の引数contextはオプションであることに注意してください。
なちけた2017年

2

あなたのチェーンの真ん中はおそらくreact-transform-hmr/index.jsそれが約半分の途中から始まるのです。PrefetchPlugin('react-transform-hmr/index')プロファイルを再試行して、ビルドにかかる総時間を短縮するのに役立つかどうかを確認できます。


さらに悪いことに.. 2351msから2361msまで、それはまたエラーを投げますEntry module not found: Error: Cannot resolve module 'react-transform-hmr/index' in /Users/asafkatz/Development/my-react-builerplate
Asaf Katz

4
まあ、10msの差は悪くはありません、差は統計的に重要ではありません。私は、W /別物遊んで、と思いますreact-transform-hmrか、react-transform-hmr/index.jsなど
アーロン・イェンセン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.