Skip to content

Commit b08762b

Browse files
committed
optimize optimization plugins
1 parent 6db1526 commit b08762b

File tree

3 files changed

+19
-12
lines changed

3 files changed

+19
-12
lines changed

lib/Chunk.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,15 @@ class Chunk {
195195
return Array.from(this._modules);
196196
}
197197

198+
getModulesIdent() {
199+
this._ensureModulesSorted();
200+
let str = "";
201+
this._modules.forEach(m => {
202+
str += m.identifier() + "#";
203+
});
204+
return str;
205+
}
206+
198207
remove(reason) {
199208
// cleanup modules
200209
// Array.from is used here to create a clone, because removeChunk modifies this._modules

lib/optimize/EnsureChunkConditionsPlugin.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,19 @@ class EnsureChunkConditionsPlugin {
88

99
apply(compiler) {
1010
compiler.plugin("compilation", (compilation) => {
11+
const triesMap = new Map();
1112
compilation.plugin(["optimize-chunks-basic", "optimize-extracted-chunks-basic"], (chunks) => {
1213
let changed = false;
1314
chunks.forEach((chunk) => {
1415
chunk.forEachModule((module) => {
1516
if(!module.chunkCondition) return;
1617
if(!module.chunkCondition(chunk)) {
17-
const usedChunks = module._EnsureChunkConditionsPlugin_usedChunks = (module._EnsureChunkConditionsPlugin_usedChunks || []).concat(chunk);
18+
let usedChunks = triesMap.get(module);
19+
if(!usedChunks) triesMap.set(module, usedChunks = new Set());
20+
usedChunks.add(chunk);
1821
const newChunks = [];
1922
chunk.parents.forEach((parent) => {
20-
if(usedChunks.indexOf(parent) < 0) {
23+
if(!usedChunks.has(parent)) {
2124
parent.addModule(module);
2225
newChunks.push(parent);
2326
}

lib/optimize/MergeDuplicateChunksPlugin.js

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,18 @@
44
*/
55
"use strict";
66

7-
function getChunkIdentifier(chunk) {
8-
return chunk.mapModules((m) => {
9-
return m.identifier();
10-
}).sort().join(", ");
11-
}
12-
137
class MergeDuplicateChunksPlugin {
148

159
apply(compiler) {
1610
compiler.plugin("compilation", (compilation) => {
1711
compilation.plugin("optimize-chunks-basic", (chunks) => {
18-
const map = {};
12+
const map = Object.create(null);
1913
chunks.slice().forEach((chunk) => {
2014
if(chunk.hasRuntime() || chunk.hasEntryModule()) return;
21-
const ident = getChunkIdentifier(chunk);
22-
if(map[ident]) {
23-
if(map[ident].integrate(chunk, "duplicate"))
15+
const ident = chunk.getModulesIdent();
16+
const otherChunk = map[ident];
17+
if(otherChunk) {
18+
if(otherChunk.integrate(chunk, "duplicate"))
2419
chunks.splice(chunks.indexOf(chunk), 1);
2520
return;
2621
}

0 commit comments

Comments
 (0)