渲染画布元素时,某些Android设备速度极慢

时间:2015-02-25 02:28:27

标签: javascript android html5 mobile canvas

我正在开发Android设备的应用程序,并发现特别是三星Galaxy S4,当应用程序/网页使用画布时性能极差。 奇怪的是,情况并非如此。

我测试了2个示例应用。

http://ie.microsoft.com/testdrive/Performance/FishIETank/Default.html

http://ie.microsoft.com/testdrive/Graphics/TouchEffects/Default.html

第一个工作正常,并且优于我的诺基亚(这是双核)并且是预期的。但是,另一个演示几乎完全没有响应,帧速率接近1,所有其他设备都可以正常运行。

由于第一个应用程序运行良好而另一个应用程序运行良好,因此它提出了问题,为什么? 第一个没有事件监听器,而另一个没有事件监听器。可以触摸移动而不是画布...或者是使用一些画布特征的演示,而另一个不是,因此性能很差。

我已经阅读了很多关于这个问题的主题,似乎没有人回答。大多数都是几个月......所以我认为生病是一个新话题。

有没有办法解决三星S4上的画布问题...以及可能运行4.2.x的其他Android设备。 如果这里的任何StackOverflow用户都有S4,你可以测试这两个演示并确认我的观察结果吗?

1 个答案:

答案 0 :(得分:4)

我强烈怀疑这不是特定于Canvas的问题,而是requestAnimationFrame问题。第一个动画不会尝试使用requestAnimationFrame,而第二个动画会在line 206上的this file中使用。{/ p>

固件上的Android浏览器< = 4.2 不支持 requestAnimationFrame,而是使用setTimeout,以Hz为单位划分一秒指定的帧速率,执行渲染正常事件循环。

setTimeout不会在请求的毫秒时间内执行,但会在指定的时间将事件排入循环中。如果事件循环被页面上的其他javascript挂起,或者单核设备决定其他更重要的东西,则运行时非常容易在没有requestAnimationFrame API的情况下取消优先级排序,使用setTimeout排队的回调将会断断续续。 More on setTimeout resolution and timing

不幸的是,如果你(1)采用这种基于Canvas的方法,并且(2)在不支持requestAnimationFrame的平台上,你将受到事件队列的支配。 Here is the reference table适用于哪些浏览器支持该功能。

干杯!