WebPACKのパフォーマンスを最適化するために、一つのパッケージを

最近のプロジェクトの需要は、しかし、会社のチームは非常にタイムリーなフロントの問題について話をし、少しの間を開いて、現在のプロジェクトに存在し、問題に対処するものです招集でリラックスし、この小さな運動を考えて、非常に神経質ではありません改善し、最適化する予定はありません...

その中で彼は、現在のプロジェクトのWebPACKに使用さ遅いパッケージのWebPACKの問題を、解決以前のバージョンに比べて、4.8.1バージョンでは、パフォーマンスが多くのことを改善したことを言うことができますが、いくつかの場所が残っている、非常に満足のいくものではありません例えば、最初のパッケージでも、ほぼ分を72394msを要しませんでした連続劣らず、唯一の多くを消費し、(あなたは精度node_modulesを確保するために削除する必要があるたびに)数回繰り返し、そこにいる場合場合に表示します最適化することができ、いくつかの場所を見つけ、実際に言及しないように、パッケージの速度を改善する方法はありません

プロジェクトで使用されるパッケージ化している複数のjsファイルを圧縮する必要がある場合、それは圧縮ファイルである必要があることを意味し、デフォルトの圧縮ツールUglifyJSプラグインで、圧縮されたコードを使用してシングルスレッドであるWebPACKのです。あなたが最初のオブジェクトとAST抽象構文木にコードを解決する必要がある圧縮JSコードは様々なルールの適用に行き、指示およびAST分析を処理し、このプロセスは非常に大きなリードを取るため、そのための正式な環境でのパッケージの圧縮コードは(非常に遅いです)

const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

new UglifyJsPlugin({
    cache: true,
    parallel: true,
    sourceMap: false
})
复制代码

WebPACKの並列-uglify - プラグインの複数のWebPACK JSファイルがあり、以前に使用UglifyJSに圧縮して出力する必要がありますされており、そこにマルチスレッドやマルチプロセスのパッケージングツールん、ましてや実際に持っていること圧縮と出力、比較UglifyJS、ParallelUglifyPluginプラグインが完了するまでに複数の子プロセスに割り当てられた複数の子プロセスに複数のファイル圧縮作業を開けませんが、それぞれの子プロセスまたはコードを圧縮UglifyJS通過し、平行になること以上のものになります複数のサブタスク処理効率は明らかに多くのことを改善します。

最初のWebPACK-並列uglify-プラグインプラグインをインストールします。

npm i -D webpack-parallel-uglify-plugin
复制代码

以下のような構成は以下のとおりです。

const ParallelUglifyPlugin = require('webpack-parallel-uglify-plugin');

module.exports = {
  plugins: [
    new ParallelUglifyPlugin({
      uglifyJS: {
        output: {
          /*
           是否输出可读性较强的代码,即会保留空格和制表符,默认为输出,为了达到更好的压缩效果,
           可以设置为false
          */
          beautify: false,
          /*
           是否保留代码中的注释,默认为保留,为了达到更好的压缩效果,可以设置为false
          */
          comments: false
        },
        compress: {
          /*
           是否在UglifyJS删除没有用到的代码时输出警告信息,默认为输出,可以设置为false关闭这些作用
           不大的警告
          */
          warnings: false,

          /*
           是否删除代码中所有的console语句,默认为不删除,开启后,会删除所有的console语句
          */
          drop_console: true,

          /*
           是否内嵌虽然已经定义了,但是只用到一次的变量,比如将 var x = 1; y = x, 转换成 y = 5, 默认为不
           转换,为了达到更好的压缩效果,可以设置为false
          */
          collapse_vars: true,

          /*
           是否提取出现了多次但是没有定义成变量去引用的静态值,比如将 x = 'xxx'; y = 'xxx'  转换成
           var a = 'xxxx'; x = a; y = a; 默认为不转换,为了达到更好的压缩效果,可以设置为false
          */
          reduce_vars: true
        }
      }
    }),
  ]
}
复制代码

テスト:ファイルがParallelUglifyPluginを圧縮する必要が使用定期的な試合、デフォルトは/.js$/です。

含める:圧縮ファイルを含むように定期的にParallelUglifyPluginを使用し、デフォルトは[]です。

除外:圧縮ファイルが含まれている定期的なParallelUglifyPluginを使用しない場合、デフォルトは[]です。

示すcacheDir:キャッシュ圧縮の結果、キャッシュから直接、次の出会いに同じ入力を取得し、圧縮の結果を返し、キャッシュ格納ディレクトリのパスを設定するための示すcacheDir。デフォルトのキャッシュは、ディレクトリのパスを設定してキャッシュを開きたいことはありません。

workerCount:同時に圧縮を実行するためにいくつかのサブプロセスを開きます。デフォルトでは、コンピュータを実行しているCPUコアの現在の数マイナス1

sourceMap:ソース地図を対応する圧縮後のコードを生成するかどうか、デフォルトが発生していない、時間のかかるが大幅に圧縮は、一般的に、サイトへのユーザのブラウザではありません後sourceMapがコードを送って、開封後に増加されます。

uglifyJS:コードES5、オブジェクトタイプ、直接パラメータUglifyJSを通過圧縮された構成。

uglifyES:コードES6、オブジェクトタイプ、直接パラメータUglifyESを通過圧縮された構成。

プロジェクトにパッケージ最終的な構成は、(実際の状況の選択に応じて)、ほぼ20代(54786ms)、いくつかのテスト以下の速度を向上するために、我々は非常に実質的と言うことができます

new ParallelUglifyPlugin({
    output:{
      beautify: false,
      comments: false
    },
    compress:{
      warnings: false,
      drop_console: true,
      collapse_vars: true,
      reduce_vars: true
    },
    test: /.js$/g,
    include: [],
    exclude: [],
    cacheDir: '',
    workerCount: '',
    sourceMap: false
 })
复制代码

WebPACKのは、新たな問題に直面し、新しいことを学ぶためにどのように、必要不可欠なフロントエンドエンジニアリングの一部、そして今更新されたバージョンなど、比較的高速であると言うことができ、恐怖は避けられない、と道路のフロントエンドが長く、アップ検索とダウンので、それをすること

おすすめ

転載: blog.csdn.net/weixin_34088583/article/details/91368481
おすすめ