From c8bb1f2b7e4cd2192a893c05c3657c6fd082c74b Mon Sep 17 00:00:00 2001 From: Matthias Osswald Date: Wed, 9 Feb 2022 13:57:44 +0100 Subject: [PATCH] WIP: projectPreprocessor-perf --- lib/projectPreprocessor.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/projectPreprocessor.js b/lib/projectPreprocessor.js index c4f080f61..85cf0f8bf 100644 --- a/lib/projectPreprocessor.js +++ b/lib/projectPreprocessor.js @@ -231,7 +231,12 @@ class ProjectPreprocessor { return config.kind === "extension"; }); - const projectClone = JSON.parse(JSON.stringify(project)); + let projectStringified; + if (extensionConfigs.length) { + // Stringify the project before making modifications + // Using a string to efficiently create multiple independent clones + projectStringified = JSON.stringify(project); + } // While a project can contain multiple configurations, // from a dependency tree perspective it is always a single project @@ -255,7 +260,7 @@ class ProjectPreprocessor { const extensionProjects = extensionConfigs.map((config) => { // Clone original project - const configuredProject = JSON.parse(JSON.stringify(projectClone)); + const configuredProject = JSON.parse(projectStringified); // Enhance project with its configuration Object.assign(configuredProject, config);