深入理解为什么应该使用transform来替代top
话说,这个问题我们得从浏览器得渲染机制说起:
我们先来理解一下 重绘(Repainit)和 回流(Reflow):
重绘:当节点需要更改外观而不会影响布局得,比如改变 color 就称为重绘;
回流:布局或者几何属性需要改变就称为回流(换个说辞即是需要重新渲染Dom节点);
回流必定会发生重绘,重绘不一定会引发回流。回流所需得成本比重绘高得多,改变父节点里得子节点很可能会导致父节点得一系列回流。
以下几个动作可能会导致性能问题:
①.改变window大小;
②.改变字体;
③.添加或删除样式;
④.文字改变;
⑤.定位或者浮动;
⑥.盒模型;
通过查看HTML文档,学习到,重绘和回流其实也和 Eventloop 有关,为了系统学习,现摘录如下:
1.当 Eventloop 执行完 Microtasks 后,会判断 document 是否需要更新,因为浏览器是 60Hz 得刷新率,每 16.6 ms 才会更新一次;
2.然后判断是否有 resize 或者 scroll 事件,有的话会去触发事件,所以 resize 和 scroll 事件也是至少 16 ms 才会触发一次,并且自带节流功能;
3.判断是否触发了 media query;
4.更新动画并且发送事件;
5.判断是否有全屏操作事件;
6.执行 requestAnimationFrame 回调;
7.执行 IntersectionObserver 回调,该方法用于判断元素是否可见,可以用于懒加载上,但是兼容性不好;
8.更新界面;
9.以上就是一帧中可能会做的事情。如果在一帧中有空闲事件,就会去执行requestIdleCallback 回调;
综上可知,重绘和回流会影响页面性能,那么在实际开发中我们如何来尽量减少性能的损耗呢,如下:
使用transform后,页面的回流直接没有了,这就是使用transform性能更好的原因,如果我们使用定时器频繁改变 top 的时候,效果就会十分明显,其实在 css 类似的属性还有很多,这里只是以 transform 作为切入点进行讲解,其他优化的策略还有:
- opacity替代visibility ;
- 多个DOM统一操作(虽然 V8 会有缓存优化);
- 先将DOM离线,即 display:none;修改后显示;
- 不要把DOM放在已有循环中作为循环变量;
- 不要使用table;
深入理解为什么应该使用transform来替代top的更多相关文章
- CSS3 Transform变形理解与应用
CSS3 Transform变形理解与应用 Transform:对元素进行变形:Transition:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动画.但只有两个关键贞.开 ...
- z-index和transform
z-index和transform是CSS中的属性,但很少同学将二者联系到一起,感觉他们八杆子打不上.事实真的是这样吗?如果你也不能确认,这篇文章就值得你花点时间阅读.因为阅读完了,你会有所收获的. ...
- [译]IOS中AutoLayout布局与Transform的冲突问题
http://m.blog.csdn.net/blog/a345017062/43565279 原文链接见这里: http://stackoverflow.com/questions/12943107 ...
- z-index和transform,你真的了解吗?
z-index和transform是CSS中的属性,但很少同学将二者联系到一起,感觉他们八杆子打不上.事实真的是这样吗?如果你也不能确认,这篇文章就值得你花点时间阅读.因为阅读完了,你会有所收获的. ...
- Canvas transform浅析
没有前奏,直接进入主题 transform调用方法: ctx.transform(a,b,c,d,e,f);如下 var ctx = document.getElementById("myC ...
- U3D Transform用法
最近在学习unity3d,下面对Transform类做一个小结 一.常用属性和方法 1.1 常用属性: 用代码展示一下上面的一些属性,值得注意的是myCube是mySphere的父物体 using U ...
- Hough变换-理解篇
Hough变换-理解篇 霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体.该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符 ...
- Transform.eulerAngles 欧拉角
var eulerAngles : Vector3 Description描述 The rotation as Euler angles in degrees. 旋转作为欧拉角度. The x, y, ...
- 高性能Web动画和渲染原理系列(3)——transform和opacity为什么高性能
示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 华为云社区地址:[你要的前端打怪升级指南] [T ...
随机推荐
- ( 转 )超级惊艳 10款HTML5动画特效推荐
今天我们要来推荐10款超级惊艳的HTML5动画特效,有一些是基于CSS3和jQuery的,比较实用,特别是前几个HTML5动画,简直酷毙了,现在将它们分享给大家,也许你能用到这些HTML5动画和jQu ...
- Java知多少(92)滚动条
滚动条(JScrollBar)也称为滑块,用来表示一个相对值,该值代表指定范围内的一个整数.例如,用Word编辑文档时,编辑窗右边的滑块对应当前编辑位置在整个文档中的相对位置,可以通过移动选择新的编辑 ...
- 仿照支付宝账单界面--listview分组显示 用来做!发!财树充值交易明细
QQ图片20150430155638.png (151.65 KB, 下载次数: 32) 下载链接: http://pan.baidu.com/s/1kVMY1SV 密码: i8ta
- docker中,如何将镜像保存为tar文件或者将镜像保存为文件,将tar文件导入到docker中
需求说明: 在实际使用docker的过程中,比如某些机器不能上网,恰巧需要某些docker镜像,一般可以采用在能上网的机器上,pull下来基础镜像,然后将docker 镜像保存为文件,在不能上网的机器 ...
- 解决pycharm在ubuntu下搜狗输入法一直固定在左下角的问题
1.缩放VMware,当ubuntu中出现下拉导航条时,点击左上角查看>立即适应客户机,然后在pycharm中打中文的时候不用全屏,就可以看到输入法显示的文字了. 2.目前没有发现搜狗输入法版本 ...
- cocos2d-x游戏引擎核心(3.x)----启动渲染流程
(1) 首先,这里以win32平台下为例子.win32下游戏的启动都是从win32目录下main文件开始的,即是游戏的入口函数,如下: #include "main.h" #inc ...
- android高级---->Handler的原理
andriod提供了Handler来满足线程间的通信,上次在更新UI的时候也提到过Handler的使用,关于Handler的基本使用,参见博客(android基础---->子线程更新UI).今天 ...
- VBA 高级筛选
http://www.geren-jianli.com/n19719c34.aspx http://m.vccoo.com/v/4aej07_2 AdvancedFilter 函数介绍
- 如何使用swfobject(中文版)
1.SWFObject是什么? SWFObject 2提供两种优化flash播放器的嵌入方法:基于标记的方法和依赖于js的方法. SWFObject 2提供一个js的API,为嵌入SWF文件和获取Fl ...
- linux环境变量配置,转载地址:http://blog.sina.com.cn/rss/1650981242.xml
学习总结 1.Linux的变量种类按变量的生存周期来划分,Linux变量可分为两类:1. 永久的:需要修改配置文件,变量永久生效.2. 临时的:使用export命令行声明即可,变量在关 ...