我已经使用 emscripten 将我大学类(class)的一个游戏引擎项目从 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
最佳答案
这个问题我想了很久,也许可以给你一个答案。简单地说,去掉 canvas.getContext('2d')
。我想 asm.js 根本不是你的问题。
正如@BorisZbarsky 所说,这些是与 asm.js 无关的图形调用。你回答说这些运行起来没有困难。我自己测试了它,在 getContext 之后可以做很多事情,因为 2D 是繁重的图形操作,你真的不能在实时 fps 上做。
那里的简单示例:http://jsfiddle.net/windkiller/8r3gP/ 这是一个非常简单的动画,但它占用了我 60% 的 CPU。
关于javascript - 为什么 asm.js 项目在 Chrome 中运行速度比 FireFox 快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23282850/