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

Why is asm.js project running faster in Chrome then FireFox?

本文关键字:速度 运行 FireFox js asm 项目 Chrome 为什么      更新时间:2023-09-26

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