diff --git a/packages/angular_devkit/build_angular/src/tools/esbuild/angular/compiler-plugin.ts b/packages/angular_devkit/build_angular/src/tools/esbuild/angular/compiler-plugin.ts index e0d0c1507ec7..1fd544867b7d 100644 --- a/packages/angular_devkit/build_angular/src/tools/esbuild/angular/compiler-plugin.ts +++ b/packages/angular_devkit/build_angular/src/tools/esbuild/angular/compiler-plugin.ts @@ -420,8 +420,11 @@ export function createCompilerPlugin( // Combine additional metafiles with main metafile if (result.metafile && metafile) { - result.metafile.inputs = { ...result.metafile.inputs, ...metafile.inputs }; - result.metafile.outputs = { ...result.metafile.outputs, ...metafile.outputs }; + // Append the existing object, by appending to it we prevent unnecessary new objections creations with spread + // mitigating significant performance overhead for large apps. + // See: https://bugs.chromium.org/p/v8/issues/detail?id=11536 + Object.assign(result.metafile.inputs, metafile.inputs); + Object.assign(result.metafile.outputs, metafile.outputs); } } diff --git a/packages/angular_devkit/build_angular/src/tools/esbuild/bundler-context.ts b/packages/angular_devkit/build_angular/src/tools/esbuild/bundler-context.ts index dd25e85d0c43..c9168aa591da 100644 --- a/packages/angular_devkit/build_angular/src/tools/esbuild/bundler-context.ts +++ b/packages/angular_devkit/build_angular/src/tools/esbuild/bundler-context.ts @@ -18,7 +18,7 @@ import { context, } from 'esbuild'; import assert from 'node:assert'; -import { basename, dirname, extname, join, relative } from 'node:path'; +import { basename, extname, join, relative } from 'node:path'; import { LoadResultCache, MemoryLoadResultCache } from './load-result-cache'; import { convertOutputFile } from './utils'; @@ -136,8 +136,8 @@ export class BundlerContext { // Combine metafiles used for the stats option as well as bundle budgets and console output if (result.metafile) { - metafile.inputs = { ...metafile.inputs, ...result.metafile.inputs }; - metafile.outputs = { ...metafile.outputs, ...result.metafile.outputs }; + Object.assign(metafile.inputs, result.metafile.inputs); + Object.assign(metafile.outputs, result.metafile.outputs); } result.initialFiles.forEach((value, key) => initialFiles.set(key, value));