Skip to content

Commit 244e474

Browse files
committed
perf(@angular/build): use Map for chunk asset size lookups in budget calculator
Caches chunk asset sizes in a Map to reduce asset size lookups from repeated linear array searches to constant time during budget calculation.
1 parent 3c7ac15 commit 244e474

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

packages/angular/build/src/utils/bundle-calculator.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ function calculateSizes(budget: BudgetEntry, stats: BudgetStats): Size[] {
152152
}
153153

154154
abstract class Calculator {
155+
private assetMap?: ReadonlyMap<string, number>;
156+
155157
constructor(
156158
protected budget: BudgetEntry,
157159
protected chunks: BudgetChunk[],
@@ -167,15 +169,17 @@ abstract class Calculator {
167169
return 0;
168170
}
169171

172+
this.assetMap ??= new Map(this.assets.map((asset) => [asset.name, asset.size]));
173+
170174
return chunk.files
171175
.filter((file) => !file.endsWith('.map'))
172176
.map((file) => {
173-
const asset = this.assets.find((asset) => asset.name === file);
174-
if (!asset) {
177+
const assetSize = this.assetMap?.get(file);
178+
if (assetSize === undefined) {
175179
throw new Error(`Could not find asset for file: ${file}`);
176180
}
177181

178-
return asset.size;
182+
return assetSize;
179183
})
180184
.reduce((l, r) => l + r, 0);
181185
}

0 commit comments

Comments
 (0)