为什么asm.js项目在Chrome和FireFox中的运行速度更快?

时间:2014-04-25 01:45:17

标签: javascript c++ performance webgl asm.js

我已经使用emscripten将我的大学课程的游戏引擎项目从C / C ++移植到JavaScript。 asm.js优化标志已设置,我一直在测量性能。 但令人费解的是,Firefox中的性能很糟糕。虽然该项目在Chrome和Opera中运行良好。鉴于FireFox是使用asm.js优化的浏览器,这对我没有意义。

这个项目是一个使用SDL和WebGL的下坡障碍赛车游戏。在我的笔记本电脑上运行Firefox,分析器显示该演示完全受CPU限制,瓶颈出现在_SDL_LockSurface()和_TTF_RenderText_Solid()周围。这些用于渲染动态文本等。

然而在Chrome中,CPU在同一系统上大部分时间处于空闲状态。 Opera的性能也很相似。 这是否意味着asm.js优化不起作用? Firefox报告asm.js代码已成功编译。那么为什么这种优化会得到回火并导致执行最多只有帧速率的一半? 我已经使用FF版本28进行了测试,也是当前的夜间版本。演示可以在这里找到, http://www.susurrus.mars-station.com/page7.php?lang=en

1 个答案:

答案 0 :(得分:0)

我很长一段时间都在考虑这个问题,我可能会给你一个答案。简单地说,摆脱canvas.getContext('2d')。我想asm.js根本不是你的问题。

正如@BorisZbarsky所说,这些是与asm.js无关的图形调用。你回答说这些运行毫无困难。我自己测试了它,并且在getContext之后可以跟随很多东西,因为2D是重图形操作,你真的不能在实时fps中做。

那里有一个简单的例子:http://jsfiddle.net/windkiller/8r3gP/ 这是非常简单的动画,但它占我的CPU的60%。