javascript - 在node.js中运行的js文件中的%GetOptimizationStatus函数是什么

标签 javascript node.js optimization

我正在阅读this article关于优化技术,有以下代码:

//Function that contains the pattern to be inspected (using an `eval` statement)
function exampleFunction() {
    return 3;
    eval('');
}

function printStatus(fn) {
    switch(%GetOptimizationStatus(fn)) {
        case 1: console.log("Function is optimized"); break;
        case 2: console.log("Function is not optimized"); break;
        case 3: console.log("Function is always optimized"); break;
        case 4: console.log("Function is never optimized"); break;
        case 6: console.log("Function is maybe deoptimized"); break;
        case 7: console.log("Function is optimized by TurboFan"); break;
        default: console.log("Unknown optimization status"); break;
    }
}

//Fill type-info
exampleFunction();
// 2 calls are needed to go from uninitialized -> pre-monomorphic -> monomorphic
exampleFunction();

%OptimizeFunctionOnNextCall(exampleFunction);
//The next call
exampleFunction();

//Check
printStatus(exampleFunction);

我有两个问题:

  • 函数%GetOptimizationStatus%OptimizeFunctionOnNextCall从未被定义,它们从何而来?

  • 这句话是什么意思2 calls are needed to go from uninitialized -> pre-monomorphic -> monomorphic

最佳答案

当设置指定的优化标志时,

%GetOptimizationStatus%OptimizeFunctionOnNextCall 被注入(inject)到 Node 中。

单态部分基本上是说优化器在检测到多用途之前不会启动,.. 在激活 TurboFan 后。

IOW:如果您查看输出,您会注意到它调用了 exampleFunction 两次(禁用优化),并且只有在第三次尝试时 TurboFan 才会启动。

关于javascript - 在node.js中运行的js文件中的%GetOptimizationStatus函数是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39917108/

相关文章:

javascript - 这是使用 js 剥离 html 标签的安全方法吗?

ios - react native 套接字io不会从客户端发出任何事件

java - Java 编译器是否会针对手动重载决议优化远离类型转换?

MySQL ORDER BY CASE 优化

javascript - 从嵌套数组中获取非空元素的数量

javascript - :visited selector in ie 11 after page refresh 未突出显示 href 中带有 javascript 的链接

javascript - MVC 4使用jquery如何检查模型属性中是否有元素

javascript - 如何使用expressjs将数据保存在mongoDB上?

node.js - package.json 中的 "All Rights Reserved"许可证

c++ - 在 gcc 编译器中禁用特定优化(死代码消除)