Javascript 什么是「;“未优化”;Chrome Profiler中的警告意味着什么?
当我使用Chrome中的开发者工具收集JavaScript CPU配置文件时,我得到了两个关于函数的神秘警告: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
- 未优化:优化次数过多
- 未优化:内联管已脱离
到目前为止,我最接近的解释是-第一种解释可能是因为发动机已对其进行了优化,但后来发现由于某些原因优化效果不佳(可能回油类型随时间而变化,等等) 启用标志--trace opt和--trace deopt应该可以帮助您精确定位 如果评论中提供的链接已经指向你,我的借口
- 生成函数
- 包含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(…)
等,这些函数在定义了所有参数的情况下被调用。我收到了很多“未优化:优化次数太多”的警告,这些函数的运行速度比它们应有的要慢得多
通过执行以下操作,我能够修复这些功能:
请看“优化编译器”一节,谢谢@epascarello,这是一篇很棒的文章。我仍然不确定为什么我的代码会导致这些错误,但这应该会给我提供更多的信息来解决问题。你的代码中有try/catch吗?你能在这个问题中添加代码的相关部分,以便其他人可以参考代码示例进行解释吗?如果你能添加示例或代码的链接,也许我能帮上忙?谢谢Paul。在阅读该期文章中的一些评论时,似乎“内联保释”可以简化为“不要向现有对象添加新属性”。但“优化次数太多”似乎还没有答案。