首页
技术笔记
网址导航
Json在线解析
二维码
Ip地址查询
在线流程图
新用户注册
|
会员登录
在线工具
开发笔记
毒鸡汤
网址导航
免费在线流程图
13赞
825
当前位置:
开发笔记
>
开发工具
> 正文
JS动画比CSS3动画性能谁更好?-
作者:U友50081205_653 | 2021-09-10 15:19
之前一直以为css3的才是最厉害的,但是最近做HTML5页面发现在微信上的效果不是太好。最近发现的github上比较火的velocity.js,作者宣称要做DOM动画方面的领导者,完全颠覆了我的认识啊。相关链接:CSSvs.JSAnimation:WhichisFaster?
之前一直以为css3的才是最厉害的,但是最近做HTML5页面发现在微信上的效果不是太好。
最近发现的github上比较火的velocity.js,作者宣称要做DOM动画方面的领导者,完全颠覆了我的认识啊。
相关链接:
CSS vs. JS Animation: Which is Faster?
回复内容:
稍微做过一点点 Web App,目前深陷在 Android Webview 里不能自拔,来谈一点看法。
1. 在现代PC 浏览器上,CSS3 Animation 和 Transition 好写好用,流畅丝滑,而且动画过程0 GC。当然js 控制DOM动画如果控制好了,不要频繁reflow,动画也流畅。
2. 在 iOS Safari 上,CSS3 动画和js动画都容易搞流畅,只要别reflow。
3. 在 iOS Webview 上,不能用jit,js性能下降严重,如果CSS3动画能解决还是别用js。某个版本iOS之后这个限制解除了好像,不太了解。
4. 低版本 Android 用的是很老的 Webkit,没有硬件加速,CSS3支持不完全,2d Canvas有bug,性能比chrome 差老远了,如果动画复杂又大块,DOM树复杂,还用了box-shadow 之类很耗性能的样式,很难做流畅。
这种情况请考虑 Chrome on Android,或者crosswalk。
5. Android 4.4 以后,系统自带chromium,体验能做到与iOS safari不相上下。
====
另外多提一句GC。
GC 你听过吧?如果不用CSS3 Animation 和 Transition,就要用 requestAnimationFrame() 。在动画的过程中会不断调用js,消耗内存,一段时间之后触发GC,如果GC时间超出frame budget,动画会卡顿。
如果非要用js动画,那么也请考虑使用无reflow 的 transform属性,加上 translateZ(0) 强制指定硬件加速。 JS 动画也是通过更改 CSS 实现的。
而且从设计的角度来说,CSS 本身就是设计用来表现样式,JS 控制逻辑。JS 动画是 CSS3 出现之前的曲线救国。
个人觉得,简单的动画还是用 CSS 做,特别复杂的再用 JS。
codepen 上面的趋势是去 JS 化,动画一律用 CSS 实现。借助 LESS 等预编译语言可以做出很复杂的动画。
性能的话,短期手机浏览器可能对 CSS3 支持不太好,但长期一定是会优于 JS 的。 其实这个。。。。。看引擎的。。。。
chrome上css3明显流畅过js,IE11上的js动画如丝般顺滑。。。。 动画的性能的关键,不在于js执行的效率,而在于dom结构。所以css原生动画,与js动画并不会相差太大。
优化动画性能,就要减轻dom,使用合理的定位方式,等等。 这种对比应该还是要来个例子。
这是前几天我翻译一篇文章时看到的对比Building Great Mobile Menus (为你的网站创建移动菜单)
对了,我的翻译只是为了自己总结学习,有精简很多。。建议看原文=-=
不是涉及复杂的计算,css明显快,但是涉及到复杂的计算,比如点是不确定的,你还是要用js。
其实这种对比个人感觉没什么意义(可能是我水),在项目中, 大多数情况下-0-你都要用js来计算。 js+canvas(html5)+水平>css3>js+dom 就说一点,JS动画比CSS3动画有控制,且没有兼容性问题 从原理上来说的话
CSS == iOS
JS == Android
(以20马赫快速逃跑中 个人项目体会:
在没有RAF时,css方式流畅度占优。
有RAF后两者相当。
js方式要求开发人员对js足够熟悉,以避免引入其他问题 其实这点差别在实际大部分使用情况下并木有卵区别……
推荐阅读
程序员
gulp local和CLI版本不匹配
如何解决《gulplocal和CLI版本不匹配》经验,为你挑选了1个好方法。 ...
[详细]
程序员
在不使用jQuery的情况下将表转换为JavaScript中的数组
如何解决《在不使用jQuery的情况下将表转换为JavaScript中的数组》经验,为你挑选了1个好方法。 ...
[详细]
程序员
重载C++ new运算符时的大小信息
如何解决《重载C++new运算符时的大小信息》经验,为你挑选了1个好方法。 ...
[详细]
程序员
Java接口:根据对象类型调用实现类
如何解决《Java接口:根据对象类型调用实现类》经验,为你挑选了1个好方法。 ...
[详细]
程序员
python如何在列表中返回第一个value = true?
如何解决《python如何在列表中返回第一个value=true?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
非控制器类的ActionResult
如何解决《非控制器类的ActionResult》经验,为你挑选了0个好方法。 ...
[详细]
程序员
Jquery - 双击时遇到麻烦,因为课堂上有变化
如何解决《Jquery-双击时遇到麻烦,因为课堂上有变化》经验,为你挑选了0个好方法。 ...
[详细]
程序员
使用WooCommerce产品搜索搜索特定的post_type表单post_type列时出错
如何解决《使用WooCommerce产品搜索搜索特定的post_type表单post_type列时出错》经验,为你挑选了0个好方法。 ...
[详细]
程序员
C++:洛伦兹因子方程
如何解决《C++:洛伦兹因子方程》经验,为你挑选了1个好方法。 ...
[详细]
程序员
D3.js折线图工具提示问题
如何解决《D3.js折线图工具提示问题》经验,为你挑选了1个好方法。 ...
[详细]
程序员
SynchronizationContext.Post的处理顺序
如何解决《SynchronizationContext.Post的处理顺序》经验,为你挑选了0个好方法。 ...
[详细]
程序员
从服务器收听iCal事件更改
如何解决《从服务器收听iCal事件更改》经验,为你挑选了1个好方法。 ...
[详细]
程序员
关于更新当前时间戳的Mysql 5.6列在hibernate中不起作用
如何解决《关于更新当前时间戳的Mysql5.6列在hibernate中不起作用》经验,为你挑选了1个好方法。 ...
[详细]
程序员
SpriteKit如何获得正确的屏幕尺寸
如何解决《SpriteKit如何获得正确的屏幕尺寸》经验,为你挑选了1个好方法。 ...
[详细]
程序员
计算php中关联数组中值的出现次数
如何解决《计算php中关联数组中值的出现次数》经验,为你挑选了1个好方法。 ...
[详细]
程序员
带有notifyAll()的多个线程
如何解决《带有notifyAll()的多个线程》经验,为你挑选了0个好方法。 ...
[详细]
程序员
Q_PROPERTY:MEMBER vs READ/WRITE
如何解决《Q_PROPERTY:MEMBERvsREAD/WRITE》经验,为你挑选了1个好方法。 ...
[详细]
程序员
Int.TryParse()始终返回false
如何解决《Int.TryParse()始终返回false》经验,为你挑选了1个好方法。 ...
[详细]
程序员
iOS推送通知生产证书常见名称问题
如何解决《iOS推送通知生产证书常见名称问题》经验,为你挑选了0个好方法。 ...
[详细]
程序员
如何在scala中进行内存分配
如何解决《如何在scala中进行内存分配》经验,为你挑选了1个好方法。 ...
[详细]
吐了个 "CAO" !
吐个槽吧,看都看了
会员登录
|
用户注册
U友50081205_653
这个屌丝很懒,什么也没留下!
关注作者
Tags | 热门标签
eclipse
emacs
git
github
intellij-idea
macos
phpstorm
pycharm
sublime-text
svn
vim
visual-studio
visual-studio-code
webstorm
windows
编辑器
RankList | 热门文章
1
在mac os el capitan上安装make mysql
2
std :: thread构造函数传递指针和传递ref之间有区别吗?
3
通过Bash删除FreeBSD上除X最旧目录之外的所有目录(没有-printf,带空格,没有zsh)
4
低频通话的Bigtable扫描/获取响应时间(等待时间)非常高
5
在Android Studio中清理项目与重建项目与运行项目
6
如何使用Web推送通知远程关闭通知?
7
由于引用C#MVC控制器中的成员时的保护级别,对象无法访问
8
C#切换类型
9
FFmpeg错误:ratecontrol_init:无法打开stats文件
10
从pouchdb数据库中读取关系的最有效方法是什么
11
使用jQuery将图片从一个div添加到另一个div
12
你如何运行尚未写入文件的RSpec :: ExampleGroup?
13
在Haskell中实现一种语言:同源列表
14
不支持的证书类型.通用名称(CN)
15
无法将文件从捆绑包复制到iOS中的文档目录
16
使用中继搜索功能
17
将24小时格式化时间转换为十进制数
18
C#类实例列表
19
如何在中间(垂直)对齐文本
20
Xcode 7.2找不到匹配的配置文件
DevBox开发工具箱 | 专业的在线开发工具网站
京公网安备 11010802040832号
|
京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有