diff options
author | 2023-03-01 16:46:06 +0800 | |
---|---|---|
committer | 2023-03-01 08:46:06 +0000 | |
commit | f4937949d6ec6bf5a326071119638d30afa91243 (patch) | |
tree | e1fde83232abffb9fd505a19e14f56c13aa73963 /benchmark/bench/memory.js | |
parent | 045262ee9961286d21b486272764ed0f69153aa8 (diff) | |
download | astro-f4937949d6ec6bf5a326071119638d30afa91243.tar.gz astro-f4937949d6ec6bf5a326071119638d30afa91243.tar.zst astro-f4937949d6ec6bf5a326071119638d30afa91243.zip |
Refactor benchmark script (#6376)
* Add timer setting
* Setup benchmark code
* Setup memory benchmark
* Add compare function
* Add result preview
* Setup results preview
* Simplify script for CI
* Update CI
* Cleanup
* Temp remove fork guard
* Fix stuff
* Fix again
* Fix quotes
* Fix multiline output
* Simplify title
* Fix memory numbers
* Remove astro bin dir
* Fix gc
* Add repo guards
* Fix wrong call
* Set max space size
* Remove guard
* Bump memory a bit
* Organize neatly
* Update readme
* Try large md
* Try no gc
* Revert markdown and gc changes
* Test sha
* Try ref
* Try 128mb
* Set 256
* Add guard
* Apply suggestions from code review
Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>
* Add docs comment
---------
Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>
Diffstat (limited to 'benchmark/bench/memory.js')
-rw-r--r-- | benchmark/bench/memory.js | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/benchmark/bench/memory.js b/benchmark/bench/memory.js new file mode 100644 index 000000000..1f0d8ab8b --- /dev/null +++ b/benchmark/bench/memory.js @@ -0,0 +1,58 @@ +import fs from 'fs/promises'; +import { fileURLToPath } from 'url'; +import { execaCommand } from 'execa'; +import { markdownTable } from 'markdown-table'; +import { astroBin } from './_util.js'; + +/** @typedef {Record<string, import('../../packages/astro/src/core/config/timer').Stat>} AstroTimerStat */ + +/** Default project to run for this benchmark if not specified */ +export const defaultProject = 'memory-default'; + +/** + * @param {URL} projectDir + * @param {URL} outputFile + */ +export async function run(projectDir, outputFile) { + const root = fileURLToPath(projectDir); + const outputFilePath = fileURLToPath(outputFile); + + console.log('Building and benchmarking...'); + await execaCommand(`node --expose-gc --max_old_space_size=256 ${astroBin} build`, { + cwd: root, + stdio: 'inherit', + env: { + ASTRO_TIMER_PATH: outputFilePath, + }, + }); + + console.log('Raw results written to', outputFilePath); + + console.log('Result preview:'); + console.log('='.repeat(10)); + console.log(`#### Memory\n\n`); + console.log(printResult(JSON.parse(await fs.readFile(outputFilePath, 'utf-8')))); + console.log('='.repeat(10)); + + console.log('Done!'); +} + +/** + * @param {AstroTimerStat} output + */ +function printResult(output) { + return markdownTable( + [ + ['', 'Elapsed time (s)', 'Memory used (MB)', 'Final memory (MB)'], + ...Object.entries(output).map(([name, stat]) => [ + name, + (stat.elapsedTime / 1000).toFixed(2), + (stat.heapUsedChange / 1024 / 1024).toFixed(2), + (stat.heapUsedTotal / 1024 / 1024).toFixed(2), + ]), + ], + { + align: ['l', 'r', 'r', 'r'], + } + ); +} |