@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:
-
article
-
another article
-
node benchmark helper
-
node 8+ runtime/runtime.h for new optimization status bit mask
enum class OptimizationStatus {
kIsFunction = 1 << 0,
kNeverOptimize = 1 << 1,
kAlwaysOptimize = 1 << 2,
kMaybeDeopted = 1 << 3,
kOptimized = 1 << 4,
kTurboFanned = 1 << 5,
kInterpreted = 1 << 6,
kMarkedForOptimization = 1 << 7,
kMarkedForConcurrentOptimization = 1 << 8,
kOptimizingConcurrently = 1 << 9,
kIsExecuting = 1 << 10,
kTopmostFrameIsTurboFanned = 1 << 11,
};
Install
npm install @optimal/fn --save
Usage
var optimize = require('@optimal/fn')
function fn() { }
var result = optimize(fn)
console.log(result)
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.