@optimal/fn
v0.3.1
Published
Force V8 to try to optimize a function and check optimization status in nodes 4, 6, 8, and 10.
Downloads
4
Maintainers
Readme
@optimal/fn
Force V8 to try to optimize a function and check optimization status in nodes 4, 6, 7, and 8.
Use in benchmarking to optimize before running the benchmark.
Use in analysis to test if your functions can be optimized.
See tests for examples of what optimizes and what doesn't. [JS] [CS]
See:
node 8+ runtime/runtime.h for new optimization status bit mask
enum class OptimizationStatus { kIsFunction = 1 << 0, // 1 kNeverOptimize = 1 << 1, // 2 kAlwaysOptimize = 1 << 2, // 4 kMaybeDeopted = 1 << 3, // 8 kOptimized = 1 << 4, // 16 kTurboFanned = 1 << 5, // 32 kInterpreted = 1 << 6, // 64 kMarkedForOptimization = 1 << 7, // 128 kMarkedForConcurrentOptimization = 1 << 8, // 256 kOptimizingConcurrently = 1 << 9, // 512 kIsExecuting = 1 << 10, // 1024 kTopmostFrameIsTurboFanned = 1 << 11, // 2048 };
Install
npm install @optimal/fn --save
Usage
// 1. attempt to optimize a function and get its status
var optimize = require('@optimal/fn')
function fn() { }
var result = optimize(fn)
console.log(result)
// {
// optimized: true,
// always : false,
// maybe : false,
// TurboFan : false
// }
// 2. test a function to see if it's optimized:
var someOtherFn = getSomeOtherFn()
result = optimize.check(someOtherFn)
Result Properties
The result may contain these properties:
- optimized - true when optimized, false otherwise
- always - When function "is optimized" then always will be false. When function is "always optimized" then always will be true. When function will "never be optimized" then always is true (and optimized is false).
- maybe - when function is "maybe deoptimized" then maybe is true, otherwise it is false.
- TurboFan - when function is "optimized by TurboFan" then this is true, otherwise it is false.