【发布时间】:2014-04-25 01:45:17
【问题描述】:
我使用 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
【问题讨论】:
-
可能相关。没有把握。 stackoverflow.com/questions/17951449/…
-
也是如此。这个问题的最佳答案是从 ams.js 调用 js 函数是有成本的,反之亦然。在我的情况下,我没有看到任何迹象.. 虽然无论哪种方式我都想要一个更明确的答案。
-
是的,我真的不认为这是重复的。只是一点额外的信息。我在 Chrome 中获得了三倍以上的帧速率。我想我记得听说他们基本上已经尝试针对 ASM 进行优化,但不需要声明性,因此可能只是优化得更好。不过不确定。
-
SDL_LockSurface() 和 TTF_RenderText_Solid 都是图形调用,不是吗?所以很可能是它的图形位很慢,而不是 asm.js 位....
-
是的,它们是图形调用。但这些都可以在同一系统上运行,但在 Chrome 下运行。
标签: javascript c++ performance webgl asm.js