From 78f737c537a5de076f88f604a7413e39ac8e42f9 Mon Sep 17 00:00:00 2001 From: Sanjaiyan Parthipan Date: Thu, 8 Dec 2022 19:35:06 +0530 Subject: [PATCH] perf: render pages in parallel (#1094) --- packages/bundler-vite/src/build/build.ts | 31 ++++++++-------- packages/bundler-webpack/src/build/build.ts | 41 +++++++++------------ 2 files changed, 33 insertions(+), 39 deletions(-) diff --git a/packages/bundler-vite/src/build/build.ts b/packages/bundler-vite/src/build/build.ts index d0a6dc0357..7acca72d75 100644 --- a/packages/bundler-vite/src/build/build.ts +++ b/packages/bundler-vite/src/build/build.ts @@ -1,6 +1,6 @@ import type { CreateVueAppFunction } from '@vuepress/client' import type { App, Bundler } from '@vuepress/core' -import { colors, debug, fs, importFile, withSpinner } from '@vuepress/utils' +import { debug, fs, importFile, withSpinner } from '@vuepress/utils' import type { OutputAsset, OutputChunk, RollupOutput } from 'rollup' import { build as viteBuild } from 'vite' import { resolveViteConfig } from '../resolveViteConfig.js' @@ -73,20 +73,21 @@ export const build = async ( const { renderToString } = await import('vue/server-renderer') // pre-render pages to html files - for (const page of app.pages) { - if (spinner) spinner.text = `Rendering pages ${colors.magenta(page.path)}` - await renderPage({ - app, - page, - vueApp, - vueRouter, - renderToString, - ssrTemplate, - output: clientOutput.output, - outputEntryChunk: clientEntryChunk, - outputCssAsset: clientCssAsset, - }) - } + await Promise.all( + app.pages.map((page) => + renderPage({ + app, + page, + vueApp, + vueRouter, + renderToString, + ssrTemplate, + output: clientOutput.output, + outputEntryChunk: clientEntryChunk, + outputCssAsset: clientCssAsset, + }) + ) + ) }) // keep the server bundle files in debug mode diff --git a/packages/bundler-webpack/src/build/build.ts b/packages/bundler-webpack/src/build/build.ts index 87afb9f033..705354a92d 100644 --- a/packages/bundler-webpack/src/build/build.ts +++ b/packages/bundler-webpack/src/build/build.ts @@ -1,12 +1,6 @@ import type { CreateVueAppFunction } from '@vuepress/client' import type { App, Bundler } from '@vuepress/core' -import { - colors, - debug, - fs, - importFileDefault, - withSpinner, -} from '@vuepress/utils' +import { debug, fs, importFileDefault, withSpinner } from '@vuepress/utils' import webpack from 'webpack' import { resolveWebpackConfig } from '../resolveWebpackConfig.js' import type { WebpackBundlerOptions } from '../types.js' @@ -96,23 +90,22 @@ export const build = async ( const { renderToString } = await import('vue/server-renderer') // pre-render pages to html files - for (const page of app.pages) { - if (spinner) { - spinner.text = `Rendering pages ${colors.magenta(page.path)}` - } - await renderPage({ - app, - page, - vueApp, - vueRouter, - renderToString, - ssrTemplate, - allFilesMeta, - initialFilesMeta, - asyncFilesMeta, - moduleFilesMetaMap, - }) - } + await Promise.all( + app.pages.map((page) => + renderPage({ + app, + page, + vueApp, + vueRouter, + renderToString, + ssrTemplate, + allFilesMeta, + initialFilesMeta, + asyncFilesMeta, + moduleFilesMetaMap, + }) + ) + ) }) // keep the server bundle files in debug mode