From 9677bfea43cbce2d7e4dfeee2100ec40a33edce6 Mon Sep 17 00:00:00 2001 From: _Kerman Date: Mon, 12 Aug 2024 00:18:03 +0800 Subject: [PATCH 01/18] feat: waterfall --- src/client/pages/index.vue | 3 + src/client/pages/index/waterfall.vue | 148 +++++++++++++++++++++++++++ src/node/index.ts | 14 +++ src/types.ts | 23 +++-- 4 files changed, 181 insertions(+), 7 deletions(-) create mode 100644 src/client/pages/index/waterfall.vue diff --git a/src/client/pages/index.vue b/src/client/pages/index.vue index 01f759c..75732e3 100644 --- a/src/client/pages/index.vue +++ b/src/client/pages/index.vue @@ -49,6 +49,9 @@ onMounted(() => {
+ +
+ diff --git a/src/client/pages/index/waterfall.vue b/src/client/pages/index/waterfall.vue new file mode 100644 index 0000000..201a4e9 --- /dev/null +++ b/src/client/pages/index/waterfall.vue @@ -0,0 +1,148 @@ + + + diff --git a/src/node/index.ts b/src/node/index.ts index e673cb8..113b171 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -4,6 +4,7 @@ import sirv from 'sirv' import { createRPCServer } from 'vite-dev-rpc' import c from 'picocolors' import { debounce } from 'perfect-debounce' +import { objectMap } from '@antfu/utils' import type { HMRData, RPCFunctions } from '../types' import { DIR_CLIENT } from '../dir' import type { Options } from './options' @@ -125,6 +126,7 @@ export default function PluginInspect(options: Options = {}): Plugin { const rpcFunctions: RPCFunctions = { list: () => ctx.getList(server), getIdInfo, + getWaterfallInfo, getPluginMetrics: (ssr = false) => ctx.getPluginMetrics(ssr), getServerMetrics, resolveId: (id: string, ssr = false) => ctx.resolveId(id, ssr), @@ -163,6 +165,18 @@ export default function PluginInspect(options: Options = {}): Plugin { } } + function getWaterfallInfo(ssr = false) { + const recorder = ctx.getRecorder(ssr) + return objectMap(recorder.transform, (id, transforms) => [ + id, + transforms.map(transform => ({ + name: transform.name, + start: transform.start, + end: transform.end, + })), + ]) + } + function clearId(_id: string, ssr = false) { const id = ctx.resolveId(_id) if (id) { diff --git a/src/types.ts b/src/types.ts index 52d3748..d06962b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -48,6 +48,14 @@ export interface ModuleTransformInfo { transforms: TransformInfo[] } +export interface WaterfallInfo { + [id: string]: { + name: string + start: number + end: number + }[] +} + export interface PluginMetricInfo { name: string enforce?: string @@ -62,13 +70,14 @@ export interface PluginMetricInfo { } export interface RPCFunctions { - list(): Awaitable - getIdInfo(id: string, ssr: boolean, clear?: boolean): Awaitable - resolveId(id: string, ssr: boolean): Awaitable - clear(id: string, ssr: boolean): Awaitable - getPluginMetrics(ssr: boolean): Awaitable - getServerMetrics(): Awaitable>> - moduleUpdated(): void + list: () => Awaitable + getIdInfo: (id: string, ssr: boolean, clear?: boolean) => Awaitable + getWaterfallInfo: (ssr: boolean) => Awaitable + resolveId: (id: string, ssr: boolean) => Awaitable + clear: (id: string, ssr: boolean) => Awaitable + getPluginMetrics: (ssr: boolean) => Awaitable + getServerMetrics: () => Awaitable>> + moduleUpdated: () => void } export interface HMRData { From 64bcf746e2eca707f159b487fa6b63fdd4066fb8 Mon Sep 17 00:00:00 2001 From: _Kerman Date: Mon, 12 Aug 2024 15:28:48 +0800 Subject: [PATCH 02/18] chore: update --- src/client/logic/state.ts | 1 + src/client/pages/index/waterfall.vue | 129 ++++++++++++++++----------- src/node/index.ts | 50 +++++++++-- src/types.ts | 13 ++- 4 files changed, 124 insertions(+), 69 deletions(-) diff --git a/src/client/logic/state.ts b/src/client/logic/state.ts index 12901f7..5341780 100644 --- a/src/client/logic/state.ts +++ b/src/client/logic/state.ts @@ -10,6 +10,7 @@ export const showOneColumn = useStorage('vite-inspect-one-column', false) export const showBailout = useStorage('vite-inspect-bailout', false) export const listMode = useStorage<'graph' | 'list' | 'detailed'>('vite-inspect-mode', 'detailed') export const lineWrapping = useStorage('vite-inspect-line-wrapping', false) +export const waterfallShowResolveId = useStorage('vite-inspect-waterfall-show-resolve-id', false) export const inspectSSR = useStorage('vite-inspect-ssr', false) export const metricDisplayHook = useStorage<'transform' | 'resolveId' | 'server'>('vite-inspect-metric-display-hook', 'transform') export const sortMode = useStorage<'default' | 'time-asc' | 'time-desc'>('vite-inspect-sort', 'default') diff --git a/src/client/pages/index/waterfall.vue b/src/client/pages/index/waterfall.vue index 201a4e9..0fbd02e 100644 --- a/src/client/pages/index/waterfall.vue +++ b/src/client/pages/index/waterfall.vue @@ -1,20 +1,12 @@