2017-07-12 1 views
0

Reconstruire un module complexe prend environ 25 secondes sans UglifyJsPlugin et un peu plus de 1 minute UglifyJsPlugin. En moyenne, une version complète passe 60 à 90% du temps d'exécution dans UglifyJsPlugin et je me demandais si je faisais quelque chose de mal ou si c'est comme ça.Comment améliorer les performances de UglifyJsPlugin

utilisant: noeud 8.1.4 NPM 5.2.0 webpack 3.2.0 uglifyjs-webpack-plugin 0.4.6 uglifyjs: 2.8.29

Options:

const UGLIFYJS_OPTIONS = { 
    compress: { 
     sequences: true,  // join consecutive simple statements using the comma operator 
     properties: true,  // rewrite property access using the dot notation, for example foo["bar"] ? foo.bar 
     dead_code: true,  // remove unreachable code 
     drop_debugger: true, // remove debugger; statements 
     unsafe: false,   // apply "unsafe" transformations 
     conditionals: true,  // apply optimizations for if-s and conditional expressions 
     comparisons: true,  // apply certain optimizations to binary nodes 
     evaluate: true,   // attempt to evaluate constant expressions 
     booleans: true,   // various optimizations for boolean context 
     loops: true,   // optimizations for do, while and for loops when we can statically determine the condition 
     unused: true,   // drop unreferenced functions and variables 
     hoist_funs: true,  // hoist function declarations 
     hoist_vars: false,  // hoist var declarations (this is false by default because it seems to increase the size of the output in general) 
     if_return: true,  // optimizations for if/return and if/continue 
     join_vars: true,  // join consecutive var statements 
     cascade: true,   // small optimization for sequences, transform x, x into x and x = something(), x into x = something() 
     collapse_vars: false, // Collapse single-use var and const definitions when possible. 
     warnings: false,  // display warnings when dropping unreachable code or unused declarations etc. 
     negate_iife: true,  // negate "Immediately-Called Function Expressions" where the return value is discarded, to avoid the parens that the code generator would insert. 
     pure_getters: false, // If you pass true for this, UglifyJS will assume that object property access (e.g. foo.bar or foo["bar"]) doesn't have any side effects. 
     pure_funcs: null,  // You can pass an array of names and UglifyJS will assume that those functions do not produce side effects. 
     drop_console: false, // Pass true to discard calls to console.* functions. 
     keep_fargs: true,  // Prevents the compressor from discarding unused function arguments. You need this for code which relies on Function.length. 
     keep_fnames: false  // Pass true to prevent the compressor from mangling/discarding function names. Useful for code relying on Function.prototype.name. 
    }, 
    sourceMap: true, 
    output: { 
     comments: function (node/*: any*/, comment/*: any*/) { 
      if (comment.type === 'comment2') { 
       // multiline comment 
       return /@preserve/i.test(comment.value); 
      } 

      return false; 
     } 
    } 
}; 

Répondre