From 7007ad2cfaf764248075047b4eb7224cecdab83c Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 28 Mar 2023 00:02:11 +0800 Subject: [PATCH] perf(ModuleGraph): resolve dep urls in parallel --- packages/vite/src/node/server/moduleGraph.ts | 38 ++++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/packages/vite/src/node/server/moduleGraph.ts b/packages/vite/src/node/server/moduleGraph.ts index 4db3bcbca9a0f4..47ff8d71ade68d 100644 --- a/packages/vite/src/node/server/moduleGraph.ts +++ b/packages/vite/src/node/server/moduleGraph.ts @@ -150,15 +150,24 @@ export class ModuleGraph { const prevImports = mod.importedModules const nextImports = (mod.importedModules = new Set()) let noLongerImported: Set | undefined + let resolvePromises = [] // update import graph for (const imported of importedModules) { - const dep = - typeof imported === 'string' - ? await this.ensureEntryFromUrl(imported, ssr) - : imported - dep.importers.add(mod) - nextImports.add(dep) + if (typeof imported === 'string') { + resolvePromises.push( + this.ensureEntryFromUrl(imported, ssr).then((dep) => { + dep.importers.add(mod) + nextImports.add(dep) + }), + ) + } else { + imported.importers.add(mod) + nextImports.add(imported) + } } + + resolvePromises.length && (await Promise.all(resolvePromises)) + // remove the importer from deps that were imported but no longer are. prevImports.forEach((dep) => { if (!nextImports.has(dep)) { @@ -169,15 +178,22 @@ export class ModuleGraph { } } }) + // update accepted hmr deps const deps = (mod.acceptedHmrDeps = new Set()) + resolvePromises = [] for (const accepted of acceptedModules) { - const dep = - typeof accepted === 'string' - ? await this.ensureEntryFromUrl(accepted, ssr) - : accepted - deps.add(dep) + if (typeof accepted === 'string') { + resolvePromises.push( + this.ensureEntryFromUrl(accepted, ssr).then((dep) => deps.add(dep)), + ) + } else { + deps.add(accepted) + } } + + resolvePromises.length && (await Promise.all(resolvePromises)) + // update accepted hmr exports mod.acceptedHmrExports = acceptedExports mod.importedBindings = importedBindings