diff --git a/packages/vite-node/src/server.ts b/packages/vite-node/src/server.ts index 7588f0eb981d..8aef7c2a5e12 100644 --- a/packages/vite-node/src/server.ts +++ b/packages/vite-node/src/server.ts @@ -18,6 +18,7 @@ export class ViteNodeServer { private transformPromiseMap = new Map>() fetchCache = new Map() @@ -125,16 +126,20 @@ export class ViteNodeServer { return cache.result const externalize = await this.shouldExternalize(filePath) + let duration: number | undefined if (externalize) { result = { externalize } this.debugger?.recordExternalize(id, externalize) } else { + const start = performance.now() const r = await this._transformRequest(id) + duration = performance.now() - start result = { code: r?.code, map: r?.map as unknown as RawSourceMap } } this.fetchCache.set(filePath, { + duration, timestamp, result, }) diff --git a/packages/vitest/src/node/reporters/base.ts b/packages/vitest/src/node/reporters/base.ts index f0b761b266e8..6bb5128362ce 100644 --- a/packages/vitest/src/node/reporters/base.ts +++ b/packages/vitest/src/node/reporters/base.ts @@ -218,6 +218,7 @@ export abstract class BaseReporter implements Reporter { const collectTime = files.reduce((acc, test) => acc + Math.max(0, test.collectDuration || 0), 0) const setupTime = files.reduce((acc, test) => acc + Math.max(0, test.setupDuration || 0), 0) const testsTime = files.reduce((acc, test) => acc + Math.max(0, test.result?.duration || 0), 0) + const transformTime = Array.from(this.ctx.vitenode.fetchCache.values()).reduce((a, b) => a + (b?.duration || 0), 0) const threadTime = collectTime + testsTime + setupTime const padTitle = (str: string) => c.dim(`${str.padStart(10)} `) @@ -227,6 +228,14 @@ export abstract class BaseReporter implements Reporter { return `${Math.round(time)}ms` } + // show top 10 costly transform module + // console.log(Array.from(this.ctx.vitenode.fetchCache.entries()).filter(i => i[1].duration) + // .sort((a, b) => b[1].duration! - a[1].duration!) + // .map(i => `${time(i[1].duration!)} ${i[0]}`) + // .slice(0, 10) + // .join('\n'), + // ) + const snapshotOutput = renderSnapshotSummary(this.ctx.config.root, this.ctx.snapshot.summary) if (snapshotOutput.length) { logger.log(snapshotOutput.map((t, i) => i === 0 @@ -243,7 +252,7 @@ export abstract class BaseReporter implements Reporter { if (this.watchFilters) logger.log(padTitle('Duration'), time(threadTime)) else - logger.log(padTitle('Duration'), time(executionTime) + c.gray(` (setup ${time(setupTime)}, collect ${time(collectTime)}, tests ${time(testsTime)})`)) + logger.log(padTitle('Duration'), time(executionTime) + c.dim(` (transform ${time(transformTime)}, setup ${time(setupTime)}, collect ${time(collectTime)}, tests ${time(testsTime)})`)) logger.log() }