为什么asm.js项目在Chrome中的运行速度比FireFox快
Why is asm.js project running faster in Chrome then FireFox?
我已经使用emscripten将大学课程的游戏引擎项目从C/C++移植到JavaScript。asm.js优化标志已经设置,我一直在衡量性能。但令人费解的是,Firefox的性能很差。虽然该项目在Chrome和Opera中运行得很好。这对我来说没有意义,因为FireFox是一款使用asm.js优化的浏览器。
这个项目是一个使用SDL和WebGL的下坡回转比赛游戏。在我的笔记本电脑上的Firefox中运行,探查器显示演示完全受CPU约束,瓶颈出现在_SDL_LockSurface()和_TTF_RenderText_Solid()周围。这些用于呈现动态文本以及其他内容。
然而,在Chrome中,CPU在同一系统上的大部分时间都是空闲的。歌剧中的表演也是如此。这是否意味着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。
- 画布动画似乎不会以60帧/秒的速度运行
- Jquery.hide()和.show()在firefox上运行速度较慢,但在chrome上运行良好
- 我的jQuery运行有点慢.我该如何加快速度
- setTimeout在运行过程中更改速度
- 设置为“run_at”document_start“的 Chrome 扩展程序运行速度太快
- 为什么 setInterval 以不同的速度运行
- 使用速度运行 Tinytest
- Angular ng repeat+filter在iphone4s上运行速度慢得离谱
- ThreeJS场景以60FPS的速度运行,但让我的粉丝们兴奋不已,最终崩溃了
- 为什么我的网站在从手机打开时速度很慢,但在从桌面打开时运行良好
- 如何使setTimout函数以相同的速度运行
- 循环中的异步函数运行速度太慢.我该如何提高表现
- Chrome v54中的Web worker在非活动选项卡中运行时速度慢两倍
- CSS3运行时的转换速度
- 动画运行速度较慢,并且在chrome中没有重新加载页面就不能重播
- 是否有一种方法可以强制非活动选项卡以正常速度运行JavaScript
- 以相同速度运行的Javascript游戏循环
- 我可以以60fps的速度运行angular's digest loop来显示快速计时器吗?
- 再次触发时,计时器会以两倍的速度运行
- 以4倍速度运行Javascript时钟