From 44a7684dc2e79a6aa3b0c3cc03cd5677e0b8ba01 Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Thu, 31 May 2018 21:50:28 +0300 Subject: [PATCH] fix: perf regression --- src/index.js | 48 +++++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/src/index.js b/src/index.js index a604dc19..22213a55 100644 --- a/src/index.js +++ b/src/index.js @@ -48,18 +48,19 @@ class UglifyJsPlugin { ...uglifyOptions, }, }; - this.sourceMapsCache = new WeakMap(); } - buildError(err, file, inputSourceMap, requestShortener) { + static buildSourceMap(inputSourceMap) { + if (!inputSourceMap || !utils.isSourceMap(inputSourceMap)) { + return null; + } + + return new SourceMapConsumer(inputSourceMap); + } + + static buildError(err, file, sourceMap, requestShortener) { // Handling error which should have line, col, filename and message if (err.line) { - const sourceMapCacheKey = { file }; - let sourceMap = this.sourceMapsCache.get(sourceMapCacheKey); - if (!sourceMap) { - sourceMap = new SourceMapConsumer(inputSourceMap); - this.sourceMapsCache.set(sourceMapCacheKey, sourceMap); - } const original = sourceMap && sourceMap.originalPositionFor({ line: err.line, column: err.col, @@ -74,20 +75,11 @@ class UglifyJsPlugin { return new Error(`${file} from UglifyJs\n${err.message}`); } - buildWarning(warning, file, inputSourceMap, warningsFilter, requestShortener) { - if (!file || !inputSourceMap) { + static buildWarning(warning, file, sourceMap, warningsFilter, requestShortener) { + if (!file || !sourceMap) { return warning; } - const sourceMapCacheKey = { file }; - - let sourceMap = this.sourceMapsCache.get(sourceMapCacheKey); - - if (!sourceMap) { - sourceMap = new SourceMapConsumer(inputSourceMap); - this.sourceMapsCache.set(sourceMapCacheKey, sourceMap); - } - const match = warningRegex.exec(warning); const line = +match[1]; const column = +match[2]; @@ -188,10 +180,10 @@ class UglifyJsPlugin { tasks.push(task); } catch (error) { compilation.errors.push( - this.buildError( + UglifyJsPlugin.buildError( error, file, - inputSourceMap, + UglifyJsPlugin.buildSourceMap(inputSourceMap), requestShortener, ), ); @@ -208,14 +200,20 @@ class UglifyJsPlugin { const { file, input, inputSourceMap, commentsFile } = tasks[index]; const { error, map, code, warnings, extractedComments } = data; + let sourceMap = null; + + if (error || (warnings && warnings.length > 0)) { + sourceMap = UglifyJsPlugin.buildSourceMap(inputSourceMap); + } + // Handling results // Error case: add errors, and go to next file if (error) { compilation.errors.push( - this.buildError( + UglifyJsPlugin.buildError( error, file, - inputSourceMap, + sourceMap, requestShortener, ), ); @@ -275,10 +273,10 @@ class UglifyJsPlugin { // Handling warnings if (warnings && warnings.length > 0) { warnings.forEach((warning) => { - const builtWarning = this.buildWarning( + const builtWarning = UglifyJsPlugin.buildWarning( warning, file, - inputSourceMap, + sourceMap, this.options.warningsFilter, requestShortener, );