From 251ad8848dfcdc30f9b438327356546b72c15696 Mon Sep 17 00:00:00 2001 From: pengzhanbo Date: Sun, 5 May 2024 20:24:53 +0800 Subject: [PATCH] perf: add debug log --- plugins/plugin-auto-frontmatter/package.json | 1 + .../plugin-auto-frontmatter/src/node/plugin.ts | 16 ++++++++++++---- .../plugin-blog-data/src/node/prepareBlogData.ts | 6 ++++++ plugins/plugin-notes-data/src/node/plugin.ts | 2 +- .../src/node/prepareNotesData.ts | 9 ++++++++- .../plugin-search/src/node/prepareSearchIndex.ts | 8 ++++++++ plugins/plugin-shikiji/README.md | 4 ++-- plugins/plugin-shikiji/src/node/index.ts | 4 ++-- .../node/{shikijiPlugin.ts => shikiPlugin.ts} | 2 +- pnpm-lock.yaml | 3 +++ 10 files changed, 44 insertions(+), 11 deletions(-) rename plugins/plugin-shikiji/src/node/{shikijiPlugin.ts => shikiPlugin.ts} (95%) diff --git a/plugins/plugin-auto-frontmatter/package.json b/plugins/plugin-auto-frontmatter/package.json index 4212fb03..3204bba9 100644 --- a/plugins/plugin-auto-frontmatter/package.json +++ b/plugins/plugin-auto-frontmatter/package.json @@ -36,6 +36,7 @@ "vuepress": "2.0.0-rc.9" }, "dependencies": { + "@pengzhanbo/utils": "^1.1.2", "chokidar": "^3.6.0", "create-filter": "^1.0.1", "fast-glob": "^3.3.2", diff --git a/plugins/plugin-auto-frontmatter/src/node/plugin.ts b/plugins/plugin-auto-frontmatter/src/node/plugin.ts index 6b71b143..2785709a 100644 --- a/plugins/plugin-auto-frontmatter/src/node/plugin.ts +++ b/plugins/plugin-auto-frontmatter/src/node/plugin.ts @@ -1,9 +1,10 @@ -import { fs } from 'vuepress/utils' +import { colors, fs, logger } from 'vuepress/utils' import type { Plugin } from 'vuepress/core' import chokidar from 'chokidar' import { createFilter } from 'create-filter' import grayMatter from 'gray-matter' import jsonToYaml from 'json2yaml' +import { promiseParallel } from '@pengzhanbo/utils' import type { AutoFrontmatterOptions, FrontmatterArray, @@ -13,6 +14,8 @@ import type { import { readMarkdown, readMarkdownList } from './readFiles.js' import { ensureArray, isEmptyObject } from './utils.js' +const PLUGIN_NAME = '@vuepress-plume/plugin-auto-frontmatter' + export function autoFrontmatterPlugin({ include = ['**/*.md'], exclude = ['.vuepress/**/*', 'node_modules'], @@ -70,11 +73,16 @@ export function autoFrontmatterPlugin({ } return { - name: '@vuepress-plume/plugin-auto-frontmatter', + name: PLUGIN_NAME, onInitialized: async (app) => { + const start = performance.now() const markdownList = await readMarkdownList(app.dir.source(), globFilter) - for (const file of markdownList) - await formatMarkdown(file) + await promiseParallel( + markdownList.map(file => () => formatMarkdown(file)), + 64, + ) + if (app.env.isDebug) + logger.info(`\n[${colors.green(PLUGIN_NAME)}] Init time spent: ${(performance.now() - start).toFixed(2)}ms`) }, onWatched: async (app, watchers) => { const watcher = chokidar.watch('**/*.md', { diff --git a/plugins/plugin-blog-data/src/node/prepareBlogData.ts b/plugins/plugin-blog-data/src/node/prepareBlogData.ts index 37b116e7..41e22c63 100644 --- a/plugins/plugin-blog-data/src/node/prepareBlogData.ts +++ b/plugins/plugin-blog-data/src/node/prepareBlogData.ts @@ -1,4 +1,5 @@ import type { App, Page } from 'vuepress/core' +import { colors, logger } from 'vuepress/utils' import type { BlogPostData, BlogPostDataItem } from '../shared/index.js' import type { PluginOption } from './plugin.js' @@ -30,6 +31,8 @@ function getTimestamp(time: Date): number { const EXCERPT_SPLIT = '' export async function preparedBlogData(app: App, pageFilter: (id: string) => boolean, options: PluginOption): Promise { + const start = performance.now() + let pages = app.pages.filter((page) => { return page.filePathRelative && pageFilter(page.filePathRelative) }) @@ -94,4 +97,7 @@ export const extraBlogData = JSON.parse(${JSON.stringify( content += HMR_CODE await app.writeTemp('internal/blogData.js', content) + + if (app.env.isDebug) + logger.info(`\n[${colors.green('@vuepress-plume/plugin-blog-data')}] prepare blog data time spent: ${(performance.now() - start).toFixed(2)}ms`) } diff --git a/plugins/plugin-notes-data/src/node/plugin.ts b/plugins/plugin-notes-data/src/node/plugin.ts index 0500ffff..e1e737f5 100644 --- a/plugins/plugin-notes-data/src/node/plugin.ts +++ b/plugins/plugin-notes-data/src/node/plugin.ts @@ -7,7 +7,7 @@ export function notesDataPlugin(options: NotesDataOptions | NotesDataOptions[]): return (app: App) => { return { name: '@vuepress-plume/plugin-notes-data', - clientConfigFile: path.resolve( + clientConfigFile: path.join( getDirname(import.meta.url), '../client/clientConfig.js', ), diff --git a/plugins/plugin-notes-data/src/node/prepareNotesData.ts b/plugins/plugin-notes-data/src/node/prepareNotesData.ts index bba2491b..7a17c480 100644 --- a/plugins/plugin-notes-data/src/node/prepareNotesData.ts +++ b/plugins/plugin-notes-data/src/node/prepareNotesData.ts @@ -1,4 +1,4 @@ -import { path } from 'vuepress/utils' +import { colors, logger, path } from 'vuepress/utils' import type { App } from 'vuepress/core' import * as chokidar from 'chokidar' import { createFilter } from 'create-filter' @@ -66,6 +66,7 @@ function resolvedNotesData(app: App, options: NotesDataOptions, result: NotesDat } export async function prepareNotesData(app: App, options: NotesDataOptions | NotesDataOptions[]) { + const start = performance.now() const notesData: NotesData = {} const allOptions = ensureArray(options) @@ -78,6 +79,12 @@ export const notesData = ${JSON.stringify(notesData, null, 2)} content += HMR_CODE await app.writeTemp('internal/notesData.js', content) + + if (app.env.isDebug) { + logger.info( + `\n[${colors.green('@vuepress-plume/plugin-notes-data')}] prepare notes data time spent: ${(performance.now() - start).toFixed(2)}ms`, + ) + } } export function watchNotesData(app: App, watchers: any[], options: NotesDataOptions | NotesDataOptions[]): void { diff --git a/plugins/plugin-search/src/node/prepareSearchIndex.ts b/plugins/plugin-search/src/node/prepareSearchIndex.ts index ff531e98..910bd13b 100644 --- a/plugins/plugin-search/src/node/prepareSearchIndex.ts +++ b/plugins/plugin-search/src/node/prepareSearchIndex.ts @@ -1,6 +1,7 @@ import type { App, Page } from 'vuepress/core' import MiniSearch from 'minisearch' import pMap from 'p-map' +import { colors, logger } from 'vuepress/utils' import type { SearchOptions, SearchPluginOptions } from '../shared/index.js' export interface SearchIndexOptions { @@ -47,11 +48,18 @@ export async function prepareSearchIndex({ isSearchable, searchOptions, }: SearchIndexOptions) { + const start = performance.now() const pages = isSearchable ? app.pages.filter(isSearchable) : app.pages await pMap(pages, p => indexFile(p, searchOptions), { concurrency: 64, }) await writeTemp(app) + + if (app.env.isDebug) { + logger.info( + `\n[${colors.green('@vuepress-plume/plugin-search')}] prepare search time spent: ${(performance.now() - start).toFixed(2)}ms`, + ) + } } export async function onSearchIndexUpdated( diff --git a/plugins/plugin-shikiji/README.md b/plugins/plugin-shikiji/README.md index a6fc42ed..4d120039 100644 --- a/plugins/plugin-shikiji/README.md +++ b/plugins/plugin-shikiji/README.md @@ -16,12 +16,12 @@ yarn add @vuepress-plume/plugin-shikiji ``` js // .vuepress/config.[jt]s -import { shikijiPlugin } from '@vuepress-plume/plugin-shikiji' +import { shikiPlugin } from '@vuepress-plume/plugin-shikiji' export default { // ... plugins: [ - shikijiPlugin() + shikiPlugin() ] // ... } diff --git a/plugins/plugin-shikiji/src/node/index.ts b/plugins/plugin-shikiji/src/node/index.ts index 228e2bdb..0d96bfc3 100644 --- a/plugins/plugin-shikiji/src/node/index.ts +++ b/plugins/plugin-shikiji/src/node/index.ts @@ -1,6 +1,6 @@ -import { shikiPlugin } from './shikijiPlugin.js' +import { shikiPlugin } from './shikiPlugin.js' -export * from './shikijiPlugin.js' +export * from './shikiPlugin.js' export * from './types.js' export default shikiPlugin diff --git a/plugins/plugin-shikiji/src/node/shikijiPlugin.ts b/plugins/plugin-shikiji/src/node/shikiPlugin.ts similarity index 95% rename from plugins/plugin-shikiji/src/node/shikijiPlugin.ts rename to plugins/plugin-shikiji/src/node/shikiPlugin.ts index 8ae984ce..00eecd05 100644 --- a/plugins/plugin-shikiji/src/node/shikijiPlugin.ts +++ b/plugins/plugin-shikiji/src/node/shikiPlugin.ts @@ -1,7 +1,7 @@ import type { Plugin, PluginObject } from 'vuepress/core' import { getDirname, path } from 'vuepress/utils' import { highlight } from './highlight.js' -import type { HighlighterOptions } from './types' +import type { HighlighterOptions } from './types.js' export type ShikiPluginOptions = HighlighterOptions diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index da6ea26e..2634c567 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -116,6 +116,9 @@ importers: plugins/plugin-auto-frontmatter: dependencies: + '@pengzhanbo/utils': + specifier: ^1.1.2 + version: 1.1.2 chokidar: specifier: ^3.6.0 version: 3.6.0