Skip to content
This repository was archived by the owner on Dec 5, 2019. It is now read-only.

Commit 3ca5eaf

Browse files
fix: perf regression (#305)
1 parent 3f0767b commit 3ca5eaf

File tree

1 file changed

+23
-25
lines changed

1 file changed

+23
-25
lines changed

src/index.js

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,19 @@ class UglifyJsPlugin {
4848
...uglifyOptions,
4949
},
5050
};
51-
this.sourceMapsCache = new WeakMap();
5251
}
5352

54-
buildError(err, file, inputSourceMap, requestShortener) {
53+
static buildSourceMap(inputSourceMap) {
54+
if (!inputSourceMap || !utils.isSourceMap(inputSourceMap)) {
55+
return null;
56+
}
57+
58+
return new SourceMapConsumer(inputSourceMap);
59+
}
60+
61+
static buildError(err, file, sourceMap, requestShortener) {
5562
// Handling error which should have line, col, filename and message
5663
if (err.line) {
57-
const sourceMapCacheKey = { file };
58-
let sourceMap = this.sourceMapsCache.get(sourceMapCacheKey);
59-
if (!sourceMap) {
60-
sourceMap = new SourceMapConsumer(inputSourceMap);
61-
this.sourceMapsCache.set(sourceMapCacheKey, sourceMap);
62-
}
6364
const original = sourceMap && sourceMap.originalPositionFor({
6465
line: err.line,
6566
column: err.col,
@@ -74,20 +75,11 @@ class UglifyJsPlugin {
7475
return new Error(`${file} from UglifyJs\n${err.message}`);
7576
}
7677

77-
buildWarning(warning, file, inputSourceMap, warningsFilter, requestShortener) {
78-
if (!file || !inputSourceMap) {
78+
static buildWarning(warning, file, sourceMap, warningsFilter, requestShortener) {
79+
if (!file || !sourceMap) {
7980
return warning;
8081
}
8182

82-
const sourceMapCacheKey = { file };
83-
84-
let sourceMap = this.sourceMapsCache.get(sourceMapCacheKey);
85-
86-
if (!sourceMap) {
87-
sourceMap = new SourceMapConsumer(inputSourceMap);
88-
this.sourceMapsCache.set(sourceMapCacheKey, sourceMap);
89-
}
90-
9183
const match = warningRegex.exec(warning);
9284
const line = +match[1];
9385
const column = +match[2];
@@ -188,10 +180,10 @@ class UglifyJsPlugin {
188180
tasks.push(task);
189181
} catch (error) {
190182
compilation.errors.push(
191-
this.buildError(
183+
UglifyJsPlugin.buildError(
192184
error,
193185
file,
194-
inputSourceMap,
186+
UglifyJsPlugin.buildSourceMap(inputSourceMap),
195187
requestShortener,
196188
),
197189
);
@@ -208,14 +200,20 @@ class UglifyJsPlugin {
208200
const { file, input, inputSourceMap, commentsFile } = tasks[index];
209201
const { error, map, code, warnings, extractedComments } = data;
210202

203+
let sourceMap = null;
204+
205+
if (error || (warnings && warnings.length > 0)) {
206+
sourceMap = UglifyJsPlugin.buildSourceMap(inputSourceMap);
207+
}
208+
211209
// Handling results
212210
// Error case: add errors, and go to next file
213211
if (error) {
214212
compilation.errors.push(
215-
this.buildError(
213+
UglifyJsPlugin.buildError(
216214
error,
217215
file,
218-
inputSourceMap,
216+
sourceMap,
219217
requestShortener,
220218
),
221219
);
@@ -275,10 +273,10 @@ class UglifyJsPlugin {
275273
// Handling warnings
276274
if (warnings && warnings.length > 0) {
277275
warnings.forEach((warning) => {
278-
const builtWarning = this.buildWarning(
276+
const builtWarning = UglifyJsPlugin.buildWarning(
279277
warning,
280278
file,
281-
inputSourceMap,
279+
sourceMap,
282280
this.options.warningsFilter,
283281
requestShortener,
284282
);

0 commit comments

Comments
 (0)