Skip to content

Commit 9f13bfe

Browse files
committed
Optimize chunk traversal in RemoveParentModulesPlugin
1 parent 9334fd8 commit 9f13bfe

File tree

1 file changed

+12
-21
lines changed

1 file changed

+12
-21
lines changed

lib/optimize/RemoveParentModulesPlugin.js

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,20 @@
66

77
const Queue = require("../util/Queue");
88

9-
const hasModule = (chunk, module, checkedChunks) => {
10-
if(chunk.containsModule(module)) return [chunk];
11-
if(chunk.getNumberOfParents() === 0) return false;
12-
return allHaveModule(chunk.getParents().filter((c) => {
13-
return !checkedChunks.has(c);
14-
}), module, checkedChunks);
15-
};
16-
17-
const allHaveModule = (someChunks, module, checkedChunks) => {
18-
if(!checkedChunks) checkedChunks = new Set();
19-
var chunks = new Set();
20-
for(var i = 0; i < someChunks.length; i++) {
21-
checkedChunks.add(someChunks[i]);
22-
var subChunks = hasModule(someChunks[i], module, checkedChunks);
23-
if(!subChunks) return false;
9+
const getParentChunksWithModule = (currentChunk, module) => {
10+
const chunks = [];
11+
const stack = new Set(currentChunk.parentsIterable);
2412

25-
for(var index = 0; index < subChunks.length; index++) {
26-
var item = subChunks[index];
27-
28-
chunks.add(item);
13+
for(const chunk of stack) {
14+
if(chunk.containsModule(module)) {
15+
chunks.push(chunk);
16+
} else {
17+
for(const parent of chunk.parentsIterable) {
18+
stack.add(parent);
19+
}
2920
}
3021
}
22+
3123
return chunks;
3224
};
3325

@@ -93,8 +85,7 @@ class RemoveParentModulesPlugin {
9385
toRemove.add(m);
9486
}
9587
for(const module of toRemove) {
96-
const parentChunksWithModule = allHaveModule(chunk.getParents(), module);
97-
module.rewriteChunkInReasons(chunk, Array.from(parentChunksWithModule));
88+
module.rewriteChunkInReasons(chunk, getParentChunksWithModule(chunk, module));
9889
chunk.removeModule(module);
9990
}
10091
}

0 commit comments

Comments
 (0)