Skip to content

Commit 4823fec

Browse files
authoredMar 29, 2023
perf(moduleGraph): resolve dep urls in parallel (#12619)
1 parent f4e2fdf commit 4823fec

File tree

1 file changed

+44
-13
lines changed

1 file changed

+44
-13
lines changed
 

‎packages/vite/src/node/server/moduleGraph.ts

+44-13
Original file line numberDiff line numberDiff line change
@@ -148,17 +148,33 @@ export class ModuleGraph {
148148
): Promise<Set<ModuleNode> | undefined> {
149149
mod.isSelfAccepting = isSelfAccepting
150150
const prevImports = mod.importedModules
151-
const nextImports = (mod.importedModules = new Set())
152151
let noLongerImported: Set<ModuleNode> | undefined
152+
153+
let resolvePromises = []
154+
let resolveResults = new Array(importedModules.size)
155+
let index = 0
153156
// update import graph
154157
for (const imported of importedModules) {
155-
const dep =
156-
typeof imported === 'string'
157-
? await this.ensureEntryFromUrl(imported, ssr)
158-
: imported
159-
dep.importers.add(mod)
160-
nextImports.add(dep)
158+
const nextIndex = index++
159+
if (typeof imported === 'string') {
160+
resolvePromises.push(
161+
this.ensureEntryFromUrl(imported, ssr).then((dep) => {
162+
dep.importers.add(mod)
163+
resolveResults[nextIndex] = dep
164+
}),
165+
)
166+
} else {
167+
imported.importers.add(mod)
168+
resolveResults[nextIndex] = imported
169+
}
170+
}
171+
172+
if (resolvePromises.length) {
173+
await Promise.all(resolvePromises)
161174
}
175+
176+
const nextImports = (mod.importedModules = new Set(resolveResults))
177+
162178
// remove the importer from deps that were imported but no longer are.
163179
prevImports.forEach((dep) => {
164180
if (!nextImports.has(dep)) {
@@ -169,15 +185,30 @@ export class ModuleGraph {
169185
}
170186
}
171187
})
188+
172189
// update accepted hmr deps
173-
const deps = (mod.acceptedHmrDeps = new Set())
190+
resolvePromises = []
191+
resolveResults = new Array(acceptedModules.size)
192+
index = 0
174193
for (const accepted of acceptedModules) {
175-
const dep =
176-
typeof accepted === 'string'
177-
? await this.ensureEntryFromUrl(accepted, ssr)
178-
: accepted
179-
deps.add(dep)
194+
const nextIndex = index++
195+
if (typeof accepted === 'string') {
196+
resolvePromises.push(
197+
this.ensureEntryFromUrl(accepted, ssr).then((dep) => {
198+
resolveResults[nextIndex] = dep
199+
}),
200+
)
201+
} else {
202+
resolveResults[nextIndex] = accepted
203+
}
204+
}
205+
206+
if (resolvePromises.length) {
207+
await Promise.all(resolvePromises)
180208
}
209+
210+
mod.acceptedHmrDeps = new Set(resolveResults)
211+
181212
// update accepted hmr exports
182213
mod.acceptedHmrExports = acceptedExports
183214
mod.importedBindings = importedBindings

0 commit comments

Comments
 (0)
Please sign in to comment.