Skip to content

Commit 2bc88a0

Browse files
authored
Merge pull request #972 from Aukevanoost/fix/performance-metrics
fix(nf): Added debug timers
2 parents e3c1ce9 + 0736296 commit 2bc88a0

File tree

3 files changed

+54
-11
lines changed

3 files changed

+54
-11
lines changed

libs/native-federation-core/src/lib/core/build-for-federation.ts

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,16 @@ export async function buildForFederation(
3636
let artefactInfo: ArtefactInfo | undefined;
3737

3838
if (!buildParams.skipMappingsAndExposed) {
39-
var start = process.hrtime();
39+
let start = process.hrtime();
4040
artefactInfo = await bundleExposedAndMappings(
4141
config,
4242
fedOptions,
4343
externals
4444
);
45-
logDuration(start, 'To bundle all mappings and exposed.');
45+
logger.measure(
46+
start,
47+
'[build artifacts] - To bundle all mappings and exposed.'
48+
);
4649
}
4750

4851
const exposedInfo = !artefactInfo
@@ -53,41 +56,57 @@ export async function buildForFederation(
5356
const { sharedBrowser, sharedServer, separateBrowser, separateServer } =
5457
splitShared(config.shared);
5558

56-
var start = process.hrtime();
57-
59+
let start = process.hrtime();
5860
const sharedPackageInfoBrowser = await bundleShared(
5961
sharedBrowser,
6062
config,
6163
fedOptions,
6264
externals,
6365
'browser'
6466
);
67+
logger.measure(
68+
start,
69+
'[build artifacts] - To bundle all shared browser externals'
70+
);
6571

72+
start = process.hrtime();
6673
const sharedPackageInfoServer = await bundleShared(
6774
sharedServer,
6875
config,
6976
fedOptions,
7077
externals,
7178
'node'
7279
);
80+
logger.measure(
81+
start,
82+
'[build artifacts] - To bundle all shared node externals'
83+
);
7384

85+
start = process.hrtime();
7486
const separatePackageInfoBrowser = await bundleSeparate(
7587
separateBrowser,
7688
externals,
7789
config,
7890
fedOptions,
7991
'browser'
8092
);
93+
logger.measure(
94+
start,
95+
'[build artifacts] - To bundle all separate browser externals'
96+
);
8197

98+
start = process.hrtime();
8299
const separatePackageInfoServer = await bundleSeparate(
83100
separateServer,
84101
externals,
85102
config,
86103
fedOptions,
87104
'node'
88105
);
89-
90-
logDuration(start, 'To bundle all dependencies');
106+
logger.measure(
107+
start,
108+
'[build artifacts] - To bundle all separate node externals'
109+
);
91110

92111
sharedPackageInfoCache = [
93112
...sharedPackageInfoBrowser,
@@ -126,11 +145,6 @@ type SplitSharedResult = {
126145
separateServer: Record<string, NormalizedSharedConfig>;
127146
};
128147

129-
function logDuration(start: [number, number], msg: string) {
130-
var [seconds, milliseconds] = process.hrtime(start);
131-
logger.debug(`${seconds}s:${milliseconds.toFixed(3)}ms - ${msg}`);
132-
}
133-
134148
function inferPackageFromSecondary(secondary: string): string {
135149
const parts = secondary.split('/');
136150
if (secondary.startsWith('@') && parts.length >= 2) {

libs/native-federation-core/src/lib/utils/logger.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,24 @@ export const logger = {
1313
verbose && console.log(chalk.bgGreen.ansi256(15)(' DBG! '), msg),
1414
debug: (msg: any) =>
1515
verbose && console.log(chalk.bgGreen.ansi256(15)(' DBG! '), msg),
16+
measure: (start: [number, number], milestone: string) => {
17+
if (!verbose) return;
18+
19+
const [totalSeconds, nanoseconds] = process.hrtime(start);
20+
const minutes = Math.floor(totalSeconds / 60);
21+
const seconds = totalSeconds % 60;
22+
const milliseconds = nanoseconds / 1000000;
23+
24+
const msFormatted = milliseconds.toFixed(3);
25+
const timeStr = `${minutes.toString().padStart(2, '0')}:${seconds
26+
.toString()
27+
.padStart(2, '0')}:${msFormatted.padStart(7, '0')}ms`;
28+
29+
console.log(
30+
chalk.bgGreen.ansi256(15)(' DBG! '),
31+
`${timeStr} - ${milestone}`
32+
);
33+
},
1634
};
1735

1836
export const setLogLevel = (level: string) => {

libs/native-federation/src/builders/build/builder.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,10 @@ export async function* runBuilder(
228228

229229
const activateSsr = nfOptions.ssr && !nfOptions.dev;
230230

231+
let start = process.hrtime();
231232
const config = await loadFederationConfig(fedOptions);
233+
logger.measure(start, 'To load the federation config.');
234+
232235
const externals = getExternals(config);
233236
const plugins = [
234237
createSharedMappingsPlugin(config.sharedMappings),
@@ -322,8 +325,11 @@ export async function* runBuilder(
322325

323326
let federationResult: FederationInfo;
324327
try {
328+
let start = process.hrtime();
325329
federationResult = await buildForFederation(config, fedOptions, externals);
330+
logger.measure(start, 'To build the artifacts.');
326331
} catch (e) {
332+
logger.error(e?.message ?? 'Building the artifacts failed');
327333
process.exit(1);
328334
}
329335

@@ -333,12 +339,15 @@ export async function* runBuilder(
333339

334340
const hasLocales = i18n?.locales && Object.keys(i18n.locales).length > 0;
335341
if (hasLocales && localeFilter) {
342+
let start = process.hrtime();
343+
336344
translateFederationArtefacts(
337345
i18n,
338346
localeFilter,
339347
outputOptions.base,
340348
federationResult
341349
);
350+
logger.measure(start, 'To translate the artifacts.');
342351
}
343352

344353
options.deleteOutputPath = false;
@@ -392,6 +401,7 @@ export async function* runBuilder(
392401
if (!first && (nfOptions.dev || watch)) {
393402
setTimeout(async () => {
394403
try {
404+
let start = process.hrtime();
395405
federationResult = await buildForFederation(
396406
config,
397407
fedOptions,
@@ -417,6 +427,7 @@ export async function* runBuilder(
417427
if (isLocalDevelopment) {
418428
federationBuildNotifier.broadcastBuildCompletion();
419429
}
430+
logger.measure(start, 'To rebuild nf.');
420431
} catch (error) {
421432
logger.error('Federation rebuild failed!');
422433

0 commit comments

Comments
 (0)