From d469bebd7b45b060dc41d82ab1cf18ee6de7e051 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Wed, 14 Feb 2024 10:14:05 -0500 Subject: Improve Node.js performance using an AsyncIterable (#9614) * Improve Node.js performance using an AsyncIterable * Oops * Get rid of extra abstraction * Update .changeset/hip-cherries-behave.md Co-authored-by: Florian Lefebvre * Check if already resolved * Resolve on done * Get rid of unneeded "done" * Done when length is zero * Let errors resolve * Update packages/astro/src/runtime/server/render/astro/render.ts Co-authored-by: Emanuele Stoppa * Move doctype to top-level * Document the new function * Update .changeset/hip-cherries-behave.md Co-authored-by: Emanuele Stoppa * Update .changeset/hip-cherries-behave.md --------- Co-authored-by: Florian Lefebvre Co-authored-by: Emanuele Stoppa --- benchmark/make-project/render-default.js | 69 ++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 12 deletions(-) (limited to 'benchmark/make-project/render-default.js') diff --git a/benchmark/make-project/render-default.js b/benchmark/make-project/render-default.js index 3a01dcc47..36936513c 100644 --- a/benchmark/make-project/render-default.js +++ b/benchmark/make-project/render-default.js @@ -3,31 +3,68 @@ import { loremIpsumHtml, loremIpsumMd } from './_util.js'; // Map of files to be generated and tested for rendering. // Ideally each content should be similar for comparison. -export const renderFiles = { - 'astro.astro': `\ +const renderFiles = { + 'components/ListItem.astro': `\ --- +const { className, item, attrs } = Astro.props; +const nested = item !== 0; +--- +
  • + + {item} + +
  • + `, + 'components/Sublist.astro': `\ +--- +import ListItem from '../components/ListItem.astro'; +const { items } = Astro.props; const className = "text-red-500"; const style = { color: "red" }; -const items = Array.from({ length: 1000 }, (_, i) => i); --- - +
      +{items.map((item) => ( + +))} +
    + `, + 'pages/astro.astro': `\ +--- +const className = "text-red-500"; +const style = { color: "red" }; +const items = Array.from({ length: 10000 }, (_, i) => ({i})); +--- My Site

    List

    -
      - {items.map((item) => ( -
    • {item}
    • - ))} -
    + ${Array.from({ length: 1000 }) .map(() => `

    ${loremIpsumHtml}

    `) .join('\n')} `, - 'md.md': `\ + 'pages/md.md': `\ # List ${Array.from({ length: 1000 }, (_, i) => i) @@ -38,7 +75,7 @@ ${Array.from({ length: 1000 }) .map(() => loremIpsumMd) .join('\n\n')} `, - 'mdx.mdx': `\ + 'pages/mdx.mdx': `\ export const className = "text-red-500"; export const style = { color: "red" }; export const items = Array.from({ length: 1000 }, (_, i) => i); @@ -57,16 +94,24 @@ ${Array.from({ length: 1000 }) `, }; +export const renderPages = []; +for(const file of Object.keys(renderFiles)) { + if(file.startsWith('pages/')) { + renderPages.push(file.replace('pages/', '')); + } +} + /** * @param {URL} projectDir */ export async function run(projectDir) { await fs.rm(projectDir, { recursive: true, force: true }); await fs.mkdir(new URL('./src/pages', projectDir), { recursive: true }); + await fs.mkdir(new URL('./src/components', projectDir), { recursive: true }); await Promise.all( Object.entries(renderFiles).map(([name, content]) => { - return fs.writeFile(new URL(`./src/pages/${name}`, projectDir), content, 'utf-8'); + return fs.writeFile(new URL(`./src/${name}`, projectDir), content, 'utf-8'); }) ); -- cgit v1.2.3