当我使用Chrome中的开发者工具收集JavaScript CPU配置文件时,我收到两个关于功能的神秘警告:
这些实际意味着什么?什么是可能的解决方案?
我见过的另一个是未优化:TryCatchStatement ,但这是有道理的。解决方案是删除try-catch。
迄今为止我发现的最接近的解释是 - https://github.com/GoogleChrome/devtools-docs/issues/53
答案 0 :(得分:21)
我认为“未优化:优化太多次”是指chrome优化器不断重新优化功能。
https://groups.google.com/forum/#!topic/v8-users/_oZ4fUSitRY
如果我没记错的话,有几件事可能导致这种情况,包括改变类型的参数,我会尝试挖掘链接。
这个有点神秘,修复将取决于您的代码。我已经多次在我的代码中弹出这个,有时候我无法修复它。
'未优化:内联保释'似乎已在您发布的链接中回答。
对于try / catch,可以在此github页面上找到一个非详尽但有用的Chrome优化怪癖列表:
https://github.com/petkaantonov/bluebird/wiki/Optimization-killers
此页面提到当前未优化尝试/捕获:
答案 1 :(得分:7)
这些救助原因的解释正在众包并记录在这个github线程中:https://github.com/GoogleChrome/devtools-docs/issues/53
简短说明:V8不会尝试使用某些构造来优化函数,try / catch块就是一个例子,随着引擎的发展,完整列表可能会随着时间而变化。如果它试图优化它也会放弃它,然后必须多次去优化某些热函数(例如,因为每次函数执行时类型反馈都不同)。
答案 2 :(得分:3)
我有一个
function generate_year_blob(year,action,callback){
...
do_blob({act: action, cb:callback, ...})
...
}
并且我总是只使用一个参数来调用它,例如generate_year_blob(this_year)
。
那些action
(期望是字符串)和callback
(预期是函数)被传递给do_blob()
函数。
当我将来电从generate_year_blob(this_year)
更改为generate_year_blob(this_year,'',null)
时,'未优化:优化太多次'警告消失了。
我没有立即发现这一点,因为有许多类似的函数generate_month_blob(...)
,generate_day_blob(...)
等,这些函数在定义了所有参数的情况下被调用。
答案 3 :(得分:1)
第一个可能是因为引擎已对其进行了优化,但后来发现优化因某种原因没有用(可能返回类型随时间变化等)。
启用标志--trace-opt和--trace-deopt可以帮助您精确定位。
我的理由是,评论中提供的链接已经指明了你。
答案 4 :(得分:0)
我得到了很多'未优化:优化太多次'的警告,而且这些功能的运行速度比应有的慢得多。
通过执行以下操作,我能够修复这些功能:
删除未使用的变量声明
从多次循环的循环中删除函数调用(我怀疑是> 1000)