From 9f37b499bfd4a59ba8083dc06616fb0976459228 Mon Sep 17 00:00:00 2001 From: Brent Wilton Date: Wed, 28 Feb 2018 11:46:12 +1300 Subject: [PATCH 1/2] improve performance of ModuleConcatenationPlugin for loop --- lib/optimize/ModuleConcatenationPlugin.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/optimize/ModuleConcatenationPlugin.js b/lib/optimize/ModuleConcatenationPlugin.js index c591c0980c2..e7c7fc9469f 100644 --- a/lib/optimize/ModuleConcatenationPlugin.js +++ b/lib/optimize/ModuleConcatenationPlugin.js @@ -281,9 +281,12 @@ class ModuleConcatenationPlugin { for (const reason of newModule.reasons) { reason.dependency.module = newModule; } - for (const dep of newModule.dependencies) { + for (let i = 0; i < newModule.dependencies.length; i++) { + let dep = newModule.dependencies[i]; if (dep.module) { - for (const reason of dep.module.reasons) { + let reasons = dep.module.reasons; + for (let j = 0; j < reasons.length; j++) { + let reason = reasons[j]; if (reason.dependency === dep) reason.module = newModule; } } From 39095efc340fdee70bef27a89ef88d7e67db5782 Mon Sep 17 00:00:00 2001 From: Brent Wilton Date: Fri, 2 Mar 2018 14:08:26 +1300 Subject: [PATCH 2/2] add todo for ModuleConcatenationPlugin for loop bugfix --- lib/optimize/ModuleConcatenationPlugin.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/optimize/ModuleConcatenationPlugin.js b/lib/optimize/ModuleConcatenationPlugin.js index e7c7fc9469f..08e2a764160 100644 --- a/lib/optimize/ModuleConcatenationPlugin.js +++ b/lib/optimize/ModuleConcatenationPlugin.js @@ -281,6 +281,10 @@ class ModuleConcatenationPlugin { for (const reason of newModule.reasons) { reason.dependency.module = newModule; } + // TODO: remove when LTS node version contains fixed v8 version + // @see https://github.com/webpack/webpack/pull/6613 + // Turbofan does not correctly inline for-of loops with polymorphic input arrays. + // Work around issue by using a standard for loop and assigning dep.module.reasons for (let i = 0; i < newModule.dependencies.length; i++) { let dep = newModule.dependencies[i]; if (dep.module) {