import { summary, run, bench } from 'mitata'; import assert from 'assert' import { compilePaths } from "./router_v2.mjs" import * as consts from './const.js' function printCurrentStatus(fn) { // console.log(`--- checking optimizations status on ${fn.name} ---`) // let opt = %GetOptimizationStatus(fn) // console.log(`${opt.toString(2).padStart(17, '0').split('').join(' ')} (${opt}) ${fn.name}`) } function printStatusHelperText() { console.log(`┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─╸ is function │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └───╸ is never optimized │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─────╸ is always optimized │ │ │ │ │ │ │ │ │ │ │ │ │ └───────╸ is maybe deoptimized │ │ │ │ │ │ │ │ │ │ │ │ └─────────╸ is optimized │ │ │ │ │ │ │ │ │ │ │ └───────────╸ is optimized by TurboFan │ │ │ │ │ │ │ │ │ │ └─────────────╸ is interpreted │ │ │ │ │ │ │ │ │ └───────────────╸ is marked for optimization │ │ │ │ │ │ │ │ └─────────────────╸ is marked for concurrent optimization │ │ │ │ │ │ │ └───────────────────╸ is optimizing concurrently │ │ │ │ │ │ └─────────────────────╸ is executing │ │ │ │ │ └───────────────────────╸ topmost frame is turbo fanned │ │ │ │ └─────────────────────────╸ lite mode │ │ │ └───────────────────────────╸ marked for deoptimization │ │ └─────────────────────────────╸ baseline │ └───────────────────────────────╸ topmost frame is interpreted └─────────────────────────────────╸ topmost frame is baseline`) } // Warmup (de-optimize `bench()` calls) bench('noop', () => { }); bench('noop2', () => { }); let paths = [ { path: '/aa/aa', }, { path: '/aa/:blabla', }, { path: '/aa/:blabla/aa', }, { path: '/aa/:blabla/ab', }, { path: '/aa/:blabla/bb', }, { path: '/::rest', }, ] paths = consts.allRoutesGoldenBalance.map(x => ({ path: x })) let tests = [ ['/', paths[5]], ['/aa', paths[5]], ['/aa/aa', paths[0]], ['/aa/_', paths[1]], ['/aa/_/aa', paths[2]], ['/aa/_/ab', paths[3]], ['/aa/_/bb', paths[4]], ] tests = paths.map(p => ([p.path.replace(/:[^/]+/g, '_'), p])) let testStrings = tests.map(x => x[0]) let func = compilePaths(paths) for (let [_, fun] of func) { console.log(`--- Sanity checking ${fun.name} ---`) for (let test of tests) { let check = fun(test[0]) // console.log(test[0], check) assert.strictEqual(check.path, test[1]) } } for (let [_, fun] of func) { console.log(`--- warming up ${fun.name} ---`) for (var i = 0; i < 10000; i++) { testStrings.forEach(fun) } } console.log('--- sleeping ---') await new Promise(res => setTimeout(res, 1000)) for (let [org] of func) { printCurrentStatus(org); } printStatusHelperText() summary(() => { func.forEach(function([_, fun]) { bench(fun.name.slice(6), function() { return testStrings.map(fun) }) }) }) run().then(function() { for (let [check] of func) { printCurrentStatus(check); } printStatusHelperText() });