我曾尝试使用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没有任何线索。
另外,你能给我一些我如何解决它的提示吗?
谢谢!
答案 0 :(得分:0)
通常情况下,bailout
表示无法优化功能。这可能来自不支持的JS功能,例如try/catch
块,for of
等,或者因为优化过程遇到了某些限制。
正如the docs总结:
并非所有功能都可以优化。某些功能阻止优化编译器在给定函数上运行(“纾困”)
This article系列给出了一些很好的解释。基本上,内联对于良好的性能至关重要。但是功能没有系统地内联,因为它有成本。通常,只会调用多次调用的函数进行内联。
因此,在您的情况下,我猜您的display
函数中存在阻止优化的内容。消息不会直接弹出,因为并不总是/直接选择该功能进行优化:
这种优化方法的一个结果是,s hort-running程序不会退出其预热阶段并且没有得到优化。一般来说,没有必要浪费能源来优化只运行很短时间的东西。
此外,请注意,V8使用非确定性采样分析器来检测热功能。 因此,在分析标记期间,性能可能会有很大差异,具体取决于哪个功能处于活动状态。
进一步阅读here。希望这会有所帮助。