Skip to content

Commit 2c541e7

Browse files
committed
perf: move away from object.assign
1 parent 54bbc0e commit 2c541e7

File tree

1 file changed

+37
-11
lines changed

1 file changed

+37
-11
lines changed

src/runtime.ts

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,15 @@ export function getModuleDependencies(id: string, rendererContext: RendererConte
125125
// Resolve nested dependencies and merge
126126
for (const depId of meta.imports || []) {
127127
const depDeps = getModuleDependencies(depId, rendererContext)
128-
Object.assign(dependencies.styles, depDeps.styles)
129-
Object.assign(dependencies.preload, depDeps.preload)
130-
Object.assign(dependencies.prefetch, depDeps.prefetch)
128+
for (const key in depDeps.styles) {
129+
dependencies.styles[key] = depDeps.styles[key]
130+
}
131+
for (const key in depDeps.preload) {
132+
dependencies.preload[key] = depDeps.preload[key]
133+
}
134+
for (const key in depDeps.prefetch) {
135+
dependencies.prefetch[key] = depDeps.prefetch[key]
136+
}
131137
}
132138
const filteredPreload: ModuleDependencies['preload'] = {}
133139
for (const id in dependencies.preload) {
@@ -142,7 +148,13 @@ export function getModuleDependencies(id: string, rendererContext: RendererConte
142148
}
143149

144150
export function getAllDependencies(ids: Set<string>, rendererContext: RendererContext): ModuleDependencies {
145-
const cacheKey = Array.from(ids).sort().join(',')
151+
let cacheKey = ''
152+
const sortedIds = [...ids].sort()
153+
for (let i = 0; i < sortedIds.length; i++) {
154+
if (i > 0) cacheKey += ','
155+
cacheKey += sortedIds[i]
156+
}
157+
146158
if (rendererContext._dependencySets[cacheKey]) {
147159
return rendererContext._dependencySets[cacheKey]
148160
}
@@ -156,16 +168,30 @@ export function getAllDependencies(ids: Set<string>, rendererContext: RendererCo
156168

157169
for (const id of ids) {
158170
const deps = getModuleDependencies(id, rendererContext)
159-
Object.assign(allDeps.scripts, deps.scripts)
160-
Object.assign(allDeps.styles, deps.styles)
161-
Object.assign(allDeps.preload, deps.preload)
162-
Object.assign(allDeps.prefetch, deps.prefetch)
171+
for (const key in deps.scripts) {
172+
allDeps.scripts[key] = deps.scripts[key]
173+
}
174+
for (const key in deps.styles) {
175+
allDeps.styles[key] = deps.styles[key]
176+
}
177+
for (const key in deps.preload) {
178+
allDeps.preload[key] = deps.preload[key]
179+
}
180+
for (const key in deps.prefetch) {
181+
allDeps.prefetch[key] = deps.prefetch[key]
182+
}
163183

164184
for (const dynamicDepId of rendererContext.manifest?.[id]?.dynamicImports || []) {
165185
const dynamicDeps = getModuleDependencies(dynamicDepId, rendererContext)
166-
Object.assign(allDeps.prefetch, dynamicDeps.scripts)
167-
Object.assign(allDeps.prefetch, dynamicDeps.styles)
168-
Object.assign(allDeps.prefetch, dynamicDeps.preload)
186+
for (const key in dynamicDeps.scripts) {
187+
allDeps.prefetch[key] = dynamicDeps.scripts[key]
188+
}
189+
for (const key in dynamicDeps.styles) {
190+
allDeps.prefetch[key] = dynamicDeps.styles[key]
191+
}
192+
for (const key in dynamicDeps.preload) {
193+
allDeps.prefetch[key] = dynamicDeps.preload[key]
194+
}
169195
}
170196
}
171197

0 commit comments

Comments
 (0)