Skip to content

Commit cc459eb

Browse files
authored
Merge pull request webpack#5303 from probablyup/es-perf
refactor: collapse several array iterators into a single reduce
2 parents 2b0943f + 5e46fff commit cc459eb

2 files changed

Lines changed: 58 additions & 42 deletions

File tree

lib/SourceMapDevToolPlugin.js

Lines changed: 57 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,38 @@ const basename = (name) => {
1717
return name.substr(name.lastIndexOf("/") + 1);
1818
};
1919

20+
function getTaskForFile(file, chunk, options, compilation) {
21+
const asset = compilation.assets[file];
22+
if(asset.__SourceMapDevToolFile === file && asset.__SourceMapDevToolData) {
23+
const data = asset.__SourceMapDevToolData;
24+
for(const cachedFile in data) {
25+
compilation.assets[cachedFile] = data[cachedFile];
26+
if(cachedFile !== file)
27+
chunk.files.push(cachedFile);
28+
}
29+
return;
30+
}
31+
let source, sourceMap;
32+
if(asset.sourceAndMap) {
33+
const sourceAndMap = asset.sourceAndMap(options);
34+
sourceMap = sourceAndMap.map;
35+
source = sourceAndMap.source;
36+
} else {
37+
sourceMap = asset.map(options);
38+
source = asset.source();
39+
}
40+
if(sourceMap) {
41+
return {
42+
chunk,
43+
file,
44+
asset,
45+
source,
46+
sourceMap,
47+
modules: undefined
48+
};
49+
}
50+
}
51+
2052
class SourceMapDevToolPlugin {
2153
constructor(options) {
2254
if(arguments.length > 1)
@@ -43,57 +75,41 @@ class SourceMapDevToolPlugin {
4375
const requestShortener = new RequestShortener(compiler.context);
4476
const options = this.options;
4577
options.test = options.test || /\.(js|css)($|\?)/i;
78+
79+
const matchObject = ModuleFilenameHelpers.matchObject.bind(undefined, options);
80+
4681
compiler.plugin("compilation", compilation => {
4782
new SourceMapDevToolModuleOptionsPlugin(options).apply(compilation);
83+
4884
compilation.plugin("after-optimize-chunk-assets", function(chunks) {
4985
const moduleToSourceNameMapping = new Map();
5086
const tasks = [];
87+
5188
chunks.forEach(function(chunk) {
52-
chunk.files.filter(ModuleFilenameHelpers.matchObject.bind(undefined, options)).map(function(file) {
53-
const asset = compilation.assets[file];
54-
if(asset.__SourceMapDevToolFile === file && asset.__SourceMapDevToolData) {
55-
const data = asset.__SourceMapDevToolData;
56-
for(const cachedFile in data) {
57-
compilation.assets[cachedFile] = data[cachedFile];
58-
if(cachedFile !== file)
59-
chunk.files.push(cachedFile);
60-
}
61-
return;
62-
}
63-
let source, sourceMap;
64-
if(asset.sourceAndMap) {
65-
const sourceAndMap = asset.sourceAndMap(options);
66-
sourceMap = sourceAndMap.map;
67-
source = sourceAndMap.source;
68-
} else {
69-
sourceMap = asset.map(options);
70-
source = asset.source();
71-
}
72-
if(sourceMap) {
73-
return {
74-
chunk,
75-
file,
76-
asset,
77-
source,
78-
sourceMap
79-
};
80-
}
81-
}).filter(Boolean).map(task => {
82-
const modules = task.sourceMap.sources.map(source => {
83-
const module = compilation.findModule(source);
84-
return module || source;
85-
});
86-
for(const module of modules) {
87-
if(!moduleToSourceNameMapping.get(module)) {
88-
moduleToSourceNameMapping.set(module, ModuleFilenameHelpers.createFilename(module, moduleFilenameTemplate, requestShortener));
89+
chunk.files.forEach(file => {
90+
if(matchObject(file)) {
91+
const task = getTaskForFile(file, chunk, options, compilation);
92+
93+
if(task) {
94+
const modules = task.sourceMap.sources.map(source => {
95+
const module = compilation.findModule(source);
96+
return module || source;
97+
});
98+
99+
for(const module of modules) {
100+
if(!moduleToSourceNameMapping.get(module)) {
101+
moduleToSourceNameMapping.set(module, ModuleFilenameHelpers.createFilename(module, moduleFilenameTemplate, requestShortener));
102+
}
103+
}
104+
105+
task.modules = modules;
106+
107+
tasks.push(task);
89108
}
90109
}
91-
task.modules = modules;
92-
return task;
93-
}).forEach(task => {
94-
tasks.push(task);
95110
});
96111
});
112+
97113
const usedNamesSet = new Set(moduleToSourceNameMapping.values());
98114
const conflictDetectionSet = new Set();
99115

yarn.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4054,7 +4054,7 @@ ua-parser-js@^0.7.9:
40544054
version "0.7.12"
40554055
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb"
40564056

4057-
uglify-js@^2.6, uglify-js@^2.8.29:
4057+
uglify-js@^2.4.19, uglify-js@^2.6, uglify-js@^2.8.29:
40584058
version "2.8.29"
40594059
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
40604060
dependencies:

0 commit comments

Comments
 (0)