From 4376ec207cb6718b2cfcc22b3382283d699b9cf3 Mon Sep 17 00:00:00 2001 From: JoostK Date: Tue, 4 Dec 2018 22:18:00 +0100 Subject: [PATCH] perf(ivy): let ngcc first check marker file before assembling bundle (#27438) With the bundle info being assembled into a single object before the transform is started, we now greedily create a TypeScript program up-front. If a marker file exists that indicates that the bundle could be skipped the program creation has already taken place which takes a significant amount of time. This commit moves the marker check to occur before the bundle is assembled. PR Close #27438 --- packages/compiler-cli/src/ngcc/src/main.ts | 9 +++++++++ .../compiler-cli/src/ngcc/src/packages/transformer.ts | 9 --------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/compiler-cli/src/ngcc/src/main.ts b/packages/compiler-cli/src/ngcc/src/main.ts index 924fc42232..f8c613d18a 100644 --- a/packages/compiler-cli/src/ngcc/src/main.ts +++ b/packages/compiler-cli/src/ngcc/src/main.ts @@ -8,6 +8,7 @@ import * as path from 'canonical-path'; import * as yargs from 'yargs'; +import {checkMarkerFile, writeMarkerFile} from './packages/build_marker'; import {DependencyHost} from './packages/dependency_host'; import {DependencyResolver} from './packages/dependency_resolver'; import {EntryPointFormat} from './packages/entry_point'; @@ -59,6 +60,11 @@ export function mainNgcc(args: string[]): number { const dtsTransformFormat: EntryPointFormat = entryPoint.fesm2015 ? 'fesm2015' : 'esm2015'; formats.forEach(format => { + if (checkMarkerFile(entryPoint, format)) { + console.warn(`Skipping ${entryPoint.name} : ${format} (already built).`); + return; + } + const bundle = makeEntryPointBundle(entryPoint, isCore, format, format === dtsTransformFormat); if (bundle === null) { @@ -67,6 +73,9 @@ export function mainNgcc(args: string[]): number { } else { transformer.transform(entryPoint, isCore, bundle); } + + // Write the built-with-ngcc marker + writeMarkerFile(entryPoint, format); }); }); } catch (e) { diff --git a/packages/compiler-cli/src/ngcc/src/packages/transformer.ts b/packages/compiler-cli/src/ngcc/src/packages/transformer.ts index ce9e389290..e324e43524 100644 --- a/packages/compiler-cli/src/ngcc/src/packages/transformer.ts +++ b/packages/compiler-cli/src/ngcc/src/packages/transformer.ts @@ -20,7 +20,6 @@ import {Esm5Renderer} from '../rendering/esm5_renderer'; import {EsmRenderer} from '../rendering/esm_renderer'; import {FileInfo, Renderer} from '../rendering/renderer'; -import {checkMarkerFile, writeMarkerFile} from './build_marker'; import {EntryPoint} from './entry_point'; import {EntryPointBundle} from './entry_point_bundle'; @@ -53,11 +52,6 @@ export class Transformer { * @param bundle the bundle to transform. */ transform(entryPoint: EntryPoint, isCore: boolean, bundle: EntryPointBundle): void { - if (checkMarkerFile(entryPoint, bundle.format)) { - console.warn(`Skipping ${entryPoint.name} : ${bundle.format} (already built).`); - return; - } - console.warn(`Compiling ${entryPoint.name} - ${bundle.format}`); const reflectionHost = this.getHost(isCore, bundle); @@ -73,9 +67,6 @@ export class Transformer { // Write out all the transformed files. renderedFiles.forEach(file => this.writeFile(file)); - - // Write the built-with-ngcc marker - writeMarkerFile(entryPoint, bundle.format); } getHost(isCore: boolean, bundle: EntryPointBundle): NgccReflectionHost {