手机端Javascript动画性能问题。

2013-12-16 21:28:07 +08:00
 mamimoluo
要在手机端浏览器里实现一个47个带有数字小球随即跳动的动画,在电脑上很流畅,可是到了手机端(iPhone4),就非常卡。
最开始尝试使用jQuery来实现,后来发现所有通过计时器动态改变CSS属性原理的库到了手机里都卡的一笔。
后来采用CSS transition还是卡,
最后采用Raphael库,采用SVG来动画,在没有text节点的时候很流畅,可是一旦加了text节点的时候,又卡的一笔。是不是浏览器在动画text的时候需要重新渲染font,因此很卡?

大家帮忙看看,有没有好的解决方案,问题的根源在哪。

jQuery + CSS3实现:http://demo.7leyuan.com/ticai/index.html
Raphael的SVG实现:http://demo.7leyuan.com/ticai/svg.html
4405 次点击
所在节点    JavaScript
12 条回复
switch
2013-12-16 22:20:25 +08:00
使用 CSS3 时开启“硬件加速”试试?(transition3d)
P233
2013-12-16 22:26:29 +08:00
用 position 定位其实关闭了硬件加速,全部使用 transform:transition3D()
P233
2013-12-16 22:28:19 +08:00
transform:translate3d()

typo 错误,抱歉
txlty
2013-12-16 22:32:42 +08:00
PC端是流畅了,但你没注意到风扇越来越响么?

no13bus
2013-12-16 22:55:45 +08:00
做彩票的
xavierskip
2013-12-16 23:02:24 +08:00
在电脑端也没觉得多流畅呀。小球速度太快了吧
barretlee
2013-12-16 23:18:40 +08:00
注意算法的优化,通过 chrome 查看程序运行 profile ,将近十个函数的调用超过了 100ms,甚至还有300ms的, 超过100ms的函数都有待优化。

减少计算和重绘,这么多元素不停的运动,页面开销肯定很大啊,每次浏览器渲染都要计算元素的位置。

像这样的东西,用 canvas 作图,方便省事,无 DOM,效率高。
Mutoo
2013-12-16 23:29:04 +08:00
font 很要命的,能用图就用图,或者用 canvas image data。
leohxj
2013-12-17 10:59:41 +08:00
说几点你试试:
1. 把小球换成canvas
2. 使用translate3d(),去移动位置,而不是top left.
3. 可以尝试tweenlite(如果不在意文件大小)(http://www.greensock.com/gsap-js/)
mamimoluo
2013-12-17 12:42:21 +08:00
@leohxj 之前使用过tweenlite,可能是适用方法不对,我用纯canvas试一试
Tvguy
2013-12-23 13:51:33 +08:00
Basically mobile browser sucks in timer and on scroll events etc. try https://developer.mozilla.org/en-US/docs/Web/API/window.requestAnimationFrame
miniwade514
2013-12-23 19:40:22 +08:00
建议用canvas。dom操作很昂贵。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/93414

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX