javascript - 为什么 asm.js 项目在 Chrome 中运行速度比 FireFox 快?

标签 javascript c++ performance webgl asm.js

我已经使用 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/

相关文章:

javascript - 拖放事件后 Bootstrap 工具提示不隐藏

C++:使用sqlite创建动态数据库以传输语音流

c++ - 如何通过编写编辑器来学习C++?

c# - DateTime 函数之间有什么区别?

node.js - 网址表示

python - Python 中的 2D RTS?

javascript - 如何将数据绑定(bind)到knockout js中网格旁边的下拉列表

javascript - 时刻js中带有日期数字的工作日

javascript - 在 ("message"上定义 Socket.io 的最有效方法)处理程序

c++ - 并行 SURF 和 SIFT 计算