Skip to content

Commit 2f30174

Browse files
committed
fix: replace for..of to prevent v8 deoptimization
According to GoogleChrome/devtools-docs#53 (comment), use of `for...of` statements will cause a deopt in some versions of v8. In a my particular case these two changes reduced 1.6 seconds in a big rebuild.
1 parent a8c382e commit 2f30174

2 files changed

Lines changed: 6 additions & 4 deletions

File tree

lib/SourceMapDevToolPlugin.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ class SourceMapDevToolPlugin {
9696
return module || source;
9797
});
9898

99-
for(const module of modules) {
99+
for(let idx = 0; idx < modules.length; idx++) {
100+
const module = modules[idx];
100101
if(!moduleToSourceNameMapping.get(module)) {
101102
moduleToSourceNameMapping.set(module, ModuleFilenameHelpers.createFilename(module, moduleFilenameTemplate, requestShortener));
102103
}
@@ -121,7 +122,8 @@ class SourceMapDevToolPlugin {
121122
});
122123

123124
// find modules with conflicting source names
124-
for(const module of allModules) {
125+
for(let idx = 0; idx < allModules.length; idx++) {
126+
const module = allModules[idx];
125127
let sourceName = moduleToSourceNameMapping.get(module);
126128
let hasName = conflictDetectionSet.has(sourceName);
127129
if(!hasName) {

lib/dependencies/HarmonyModulesHelpers.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ class HarmonyModulesHelpers {
3434
const desc = depInQuestion.describeHarmonyExport();
3535
if(!desc.exportedName) return true;
3636
let before = true;
37-
for(const moduleDependency of module.dependencies) {
38-
const dep = moduleDependency;
37+
for(let idx = 0; idx < module.dependencies.length; idx++) {
38+
const dep = module.dependencies[idx];
3939
if(dep === depInQuestion) {
4040
before = false;
4141
continue;

0 commit comments

Comments
 (0)