Chrome JS Profiler和“Not Optimized:Inlined Bailed Out”警告

时间:2014-07-03 21:34:07

标签: javascript warnings out inlining

我曾尝试使用Chrome JS Profiler运行我的应用程序来记录CPU使用情况,我有一些警告,还有一些“ForInStatement不是快速案例”,我已修复,但我得到了“Inlined Bailed Out”警告,例如在此代码中:

function display_loader(){
  for(i in obstacles){
    display(obstacles[i])
  }
}

此功能基本上创建了一个障碍物(显示(障碍[i])绘制障碍物的特定图像 - 由于上面提到的“ForInStatement”警告,两个单独的函数用于加载和代码。

“Inlined Bailed Out”消息随机出现,特别是当我播放超过一分钟时,它出现在move_loader,display_loader或collision_loader函数中。有时候,有时却没有。

你能给我任何一句话 - 解释'这条信息真的意味着什么?我已经通过网络阅读了很多帖子,并且我理解了“ForInStatement”逻辑,但我对Inlining Bailed Out没有任何线索。

另外,你能给我一些我如何解决它的提示吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

通常情况下,bailout表示无法优化功能。这可能来自不支持的JS功能,例如try/catch块,for of等,或者因为优化过程遇到了某些限制。

正如the docs总结:

  

并非所有功能都可以优化。某些功能阻止优化编译器在给定函数上运行(“纾困”)

This article系列给出了一些很好的解释。基本上,内联对于良好的性能至关重要。但是功能没有系统地内联,因为它有成本。通常,只会调用多次调用的函数进行内联。

因此,在您的情况下,我猜您的display函数中存在阻止优化的内容。消息不会直接弹出,因为并不总是/直接选择该功能进行优化:

  

这种优化方法的一个结果是,s hort-running程序不会退出其预热阶段并且没有得到优化。一般来说,没有必要浪费能源来优化只运行很短时间的东西。

     

此外,请注意,V8使用非确定性采样分析器来检测热功能。 因此,在分析标记期间,性能可能会有很大差异,具体取决于哪个功能处于活动状态。

进一步阅读here。希望这会有所帮助。