我在http://amarnus.me/games/dodge写了这个小游戏。现在,如果您尝试在Firefox和Chrome中玩游戏,您会清楚地注意到它在Firefox中显着变慢。你可以称之为无意的作弊码,是的。 ; - )
所以我的问题是 - 这是因为与Chrome相比,Firefox中的Javascript引擎速度较慢?或者它与坏coding有关? (在我的辩护中,我是一个Javascript newb)
假设它是前者,那么这不是反对(劣势)HTML5游戏吗? (使用像我一样的<canvas>
标签的那些)
答案 0 :(得分:6)
Firefox在javascript中比chrome慢。但是,我相信使用canvas-tag也会更慢。使用ff4可能会有所改善(你试过测试版吗?)。
在网络上还有一个使用js和canvas的nes模拟器,它在chrome上运行大约30fps(如果我记得正确),但在ff中只有大约10个。
时间可能是你最好的朋友:-P,尽管你可以尝试优化。
我相信浏览器游戏会及时到来,但它还没有准备就绪。也许关于时间ie12出来:-P。
[编辑] 的 顺便说一下:我在FF4b1中试过这个游戏,我觉得它很棒。可能没有铬那么快,但距离它不远:)。
答案 1 :(得分:2)
为了获得帮助,您可以考虑提供脚本的非缩小版本。
我看到代码中有8ms的setIntervals。如上所述,Firefox从未低于10毫秒(尚未)。但是,在FFox 4中玩游戏非常有趣。我看到了两个非常小的hickup,显然是垃圾收集造成的。在这方面,Chrome比Fox更具优势。尽管SpiderMonkey(在Firefox中处理GC)已经从3.5急剧提升到3.6,但对于许多游戏来说仍然不够好。在4.0中它好多了,但仍然不如Chrome或Opera那么好。 (正在进行中。)
玩游戏并简要地查看代码,我发现没有任何复杂性会导致Firefox无法处理正在发生的事情。此外,Firefox 4的硬件加速Canvas比IE9略快,比Chrome快得多。
网络上有一种观念认为Chrome在画布方面比Gecko更快,但这是因为人们很少对其网页进行分析。事实上,Firefox 3.6中的画布已经至少与Chrome一样快,但由于JavaScript速度较慢,许多测试都没有显示。 (并且一些JavaScript测试速度较慢,因为Firefox无法很好地处理测试工具。)
所有这些都会导致许多混乱和错误信息。底线是你的游戏在Firefox 4中应该没问题。你应该看看是否有什么可以做的,以避免触发不必要的GC。例如。你重新使用变量或创建不必要的新变量吗?
然而,在Opera 10.53中它并不令人愉快。不是因为Opera无法跟上速度,而是因为它不是移动底部,而是保持静止,而整个运动场都移动了。 (尽管如此,我还是在第一次尝试时设法进入了第17级。)在Opera 10.6中,页面无法正常加载。
您可能需要调试代码 - 如果是回归,可能会向Opera提交错误。 (我会发推文以引起他们的注意。)
答案 2 :(得分:1)
我会在setTimeout和setInterval中将其中很大一部分归咎于IE和Firefox等浏览器中最小约10ms。这最初是用来阻止页面消耗整个CPU,如果他们天真地使用0ms来尽可能快地运行。 Chrome启动时没有限制,但现在moving to a 4ms minimum符合HTML5中的建议。
John Resig has some awesome posts调查setTimeout限制和准确性。
Mozilla浏览器实际上可以告诉你他们在每次setInterval调用时运行得多晚(或早期!)。查看MDC setTimeout文章(google“mdc settimeout”并查看语法部分中的灰色注释)。
除了计时器问题之外,Firefox的执行速度通常较慢(至少目前为止),并且感觉Skia(Chrome的图形库)在光栅化方面也更快。
希望这会有所帮助:)
(我原本在这里有一堆有用的链接,但这是我的第一篇帖子,垃圾邮件过滤器打了我一笔。)
答案 3 :(得分:0)
jQuery animate执行类似于DOM对象移动的操作。
我会查看他们的代码,看看他们是如何进行实际运动的,它可能是最有效的方式,因为它是用jQuery构建的。
答案 4 :(得分:0)
Chrome designed有更快的Javascript引擎。
我认为它没有说明HTML5游戏。您总能找到设置比其他用户更快或更慢的用户,无论是硬件,软件还是用户个人习惯,可以让许多应用程序同时运行。如果您的游戏是用Flash或Java编写的,那么硬件速度较慢的用户会看到类似的减速。
您可以对代码进行更改以加快速度。我没有详细检查它,但我发现你有像if(dodge.goRight == true ...
这样的结构。虽然不是缓慢的根源,但这确实暗示您可能无法在任何地方使用最佳解决方案。
答案 5 :(得分:0)
答案 6 :(得分:0)
尝试这种技巧:setTimeout with a shorter delay
如果有帮助,请告诉我。我现在有点好奇。 :)
祝你好运!