Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么是「;“未优化”;Chrome Profiler中的警告意味着什么?_Javascript_Google Chrome_Optimization_Google Chrome Devtools_Developer Tools - Fatal编程技术网

Javascript 什么是「;“未优化”;Chrome Profiler中的警告意味着什么?

Javascript 什么是「;“未优化”;Chrome Profiler中的警告意味着什么?,javascript,google-chrome,optimization,google-chrome-devtools,developer-tools,Javascript,Google Chrome,Optimization,Google Chrome Devtools,Developer Tools,当我使用Chrome中的开发者工具收集JavaScript CPU配置文件时,我得到了两个关于函数的神秘警告: 未优化:优化次数过多 未优化:内联管已脱离 这些实际上意味着什么?有哪些可能的解决方案 我看到的另一个不是优化的:TryCatchStatement,但这是有意义的。解决方案是删除try-catch 到目前为止,我最接近的解释是-第一种解释可能是因为发动机已对其进行了优化,但后来发现由于某些原因优化效果不佳(可能回油类型随时间而变化,等等) 启用标志--trace opt和--tr

当我使用Chrome中的开发者工具收集JavaScript CPU配置文件时,我得到了两个关于函数的神秘警告:

  • 未优化:优化次数过多
  • 未优化:内联管已脱离
这些实际上意味着什么?有哪些可能的解决方案

我看到的另一个不是优化的:TryCatchStatement,但这是有意义的。解决方案是删除try-catch


到目前为止,我最接近的解释是-

第一种解释可能是因为发动机已对其进行了优化,但后来发现由于某些原因优化效果不佳(可能回油类型随时间而变化,等等)

启用标志--trace opt和--trace deopt应该可以帮助您精确定位

如果评论中提供的链接已经指向你,我的借口

  • 我相信“未优化:优化过多次”指的是chrome优化器不断重新优化某个函数

    如果我没记错的话,有几件事会导致这种情况,包括改变类型的参数,我将尝试挖掘链接

    这一个有点神秘,修复将取决于您的代码。我的代码中多次出现这个弹出窗口,有时我就是无法修复它

  • “未优化:内联纾困”似乎在您发布的链接中得到了回答

  • 对于try/catch,可以在这个github页面上找到一个非详尽但有用的Chrome优化怪癖列表:

    本页提到当前未优化try/Catch:

    • 生成函数
    • 包含for of语句的函数
    • 包含try-catch语句的函数
    • 包含try finally语句的函数
    • 包含复合let赋值的函数
    • 包含复合常量赋值的函数
    • 包含包含proto或get或set声明的对象文本的函数

  • 关于这些救助原因的解释正在众包中,并记录在此github线程中:

    简短的解释:V8不会尝试使用某些构造优化函数,try/catch块就是一个例子,随着引擎的发展,完整列表可能会随着时间的推移而改变。如果它试图进行优化,然后不得不多次对某个热函数进行去优化(例如,由于每次函数执行时类型反馈不同),它也可以放弃

    我有一个

    函数生成\u year\u blob(年、操作、回调){
    ... 
    do_blob({act:action,cb:callback,…})
    ... 
    }

    我总是只使用一个参数来调用它,比如
    generate\u year\u blob(this\u year)

    那些
    action
    (预期为字符串)和
    callback
    (预期为函数)被传递给
    do\u blob()
    函数

    当我将调用从
    generate\u year\u blob(this\u year)
    更改为
    generate\u year\u blob(this\u year',null)
    时,“未优化:优化过多次”警告消失


    我没有立即发现这一点,因为有许多类似的函数
    generate\u month\u blob(…)
    generate\u day\u blob(…)
    等,这些函数在定义了所有参数的情况下被调用。

    我收到了很多“未优化:优化次数太多”的警告,这些函数的运行速度比它们应有的要慢得多

    通过执行以下操作,我能够修复这些功能:

  • 删除未使用的变量声明

  • 从多次迭代的循环中删除函数调用(我怀疑大于1000次)


  • 请看“优化编译器”一节,谢谢@epascarello,这是一篇很棒的文章。我仍然不确定为什么我的代码会导致这些错误,但这应该会给我提供更多的信息来解决问题。你的代码中有try/catch吗?你能在这个问题中添加代码的相关部分,以便其他人可以参考代码示例进行解释吗?如果你能添加示例或代码的链接,也许我能帮上忙?谢谢Paul。在阅读该期文章中的一些评论时,似乎“内联保释”可以简化为“不要向现有对象添加新属性”。但“优化次数太多”似乎还没有答案。