* Make it easier to benchmark and profile the code * Remove unnecessary escape * Clarify that the backend server is started without the frontend * Add missing NODE_CONFIG_ENV environment variable * Add error message when user has not included console.time statements * Fix lint issue * Handle multiple console.time statements * Switch NODE_CONFIG_ENV to test * Switch to const as variable never re-assigned
62 lines
1.6 KiB
JavaScript
62 lines
1.6 KiB
JavaScript
'use strict'
|
|
|
|
const readline = require('readline')
|
|
const minimist = require('minimist')
|
|
|
|
async function captureTimings(warmupIterations) {
|
|
const rl = readline.createInterface({
|
|
input: process.stdin,
|
|
})
|
|
|
|
const times = {}
|
|
let timingsCount = 0
|
|
let labelsCount = 0
|
|
const timing = /^(.+): ([0-9.]+)ms$/i
|
|
|
|
for await (const line of rl) {
|
|
const match = timing.exec(line)
|
|
if (match) {
|
|
labelsCount = Object.keys(times).length
|
|
if (timingsCount > warmupIterations * labelsCount) {
|
|
const label = match[1]
|
|
const time = parseFloat(match[2])
|
|
times[label] = time + (times[label] || 0)
|
|
}
|
|
++timingsCount
|
|
}
|
|
}
|
|
return { times, iterations: timingsCount / labelsCount }
|
|
}
|
|
|
|
function logResults({ times, iterations, warmupIterations }) {
|
|
if (isNaN(iterations)) {
|
|
console.log(
|
|
`No timings captured. Have you included console.time statements in the badge creation code path?`
|
|
)
|
|
} else {
|
|
const timedIterations = iterations - warmupIterations
|
|
for (const [label, time] of Object.entries(times)) {
|
|
const averageTime = time / timedIterations
|
|
console.log(
|
|
`Average '${label}' time over ${timedIterations} iterations: ${averageTime}ms`
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
async function main() {
|
|
const args = minimist(process.argv)
|
|
const warmupIterations = parseInt(args['warmup-iterations']) || 100
|
|
const { times, iterations } = await captureTimings(warmupIterations)
|
|
logResults({ times, iterations, warmupIterations })
|
|
}
|
|
|
|
;(async () => {
|
|
try {
|
|
await main()
|
|
} catch (e) {
|
|
console.error(e)
|
|
process.exit(1)
|
|
}
|
|
})()
|