import { summary, run, bench } from 'mitata'; function printCurrentStatus(fn) { 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', () => { }); function ifSingle(a) { if (a[0] === 97 && a[1] === 97 && a[2] === 97 && a[3] === 97 && a.length === 4) { return 100 } return 10 } function ifChain(a) { if (a[0] === 97) if (a[1] === 97) if (a[2] === 97) if (a[3] === 97) if (a.length === 4) { return 100 } return 10 } function ifSingleOpt(a) { if (a.length >= 4 && a[0] === 97 && a[1] === 97 && a[2] === 97 && a[3] === 97 && a.length === 4) { return 100 } return 10 } function ifChainOpt(a) { if (a.length >= 4) if (a[0] === 97) if (a[1] === 97) if (a[2] === 97) if (a[3] === 97) if (a.length === 4) { return 100 } return 10 } function ifSingleOptAlt(a) { if (a.length >= 4 && a[0] == 97 && a[1] == 97 && a[2] == 97 && a[3] == 97 && a.length == 4) { return 100 } return 10 } function ifChainOptAlt(a) { if (a.length >= 4) if (a[0] == 97) if (a[1] == 97) if (a[2] == 97) if (a[3] == 97) if (a.length == 4) { return 100 } return 10 } let paths = [ [97, 97, 97, 97], [97, 97, 97, 97, 97], [97, 97, 96, 97], [97, 96, 97, 97], [96, 97, 97, 97], [], [98], [97, 97, 97], [97, 97], [97], [97, 97, 96], [97, 96], [96], ] let paths2 = [ [97, 97, 97, 97], [97, 97, 97, 97, 97], [97, 97, 96, 97], [97, 96, 97, 97], [96, 97, 97, 97], [97, 97, 97, 97], [97, 97, 97, 97, 97], [97, 97, 96, 97], [97, 96, 97, 97], [96, 97, 97, 97], [97, 97, 97, 97, 97, 97], [97, 97, 97, 97, 96, 97], [97, 97, 97, 97, 97, 96], ] let func1 = [ifSingle, ifChain, ifSingleOpt, ifChainOpt, ifSingleOptAlt, ifChainOptAlt]; for (let fun of func1) { console.log('-- begin', fun.name) for (var i = 0; i < 1000000; i++) { paths.map(fun) } printCurrentStatus(fun); } printStatusHelperText() summary(() => { func1.forEach(function(fun) { bench(fun.name + ' first', function() { return paths.map(fun) }) }) func1.forEach(function(fun) { bench(fun.name + ' second', function() { return paths2.map(fun) }) }) }) run().then(function() { for (let fun of func1) { printCurrentStatus(fun); } printStatusHelperText() });