浏览器的渲染、重绘以及回流

2017-08-22  本文已影响0人  size_of

浏览器渲染

浏览器拿到html后会按自上而下的顺序依次执行,遇到link标签和img标签时会发送新的请求。渲染过程如下:

大多数浏览器请求js文件时会暂停渲染过程以防止js文件修改dom导致之前的渲染做无用功,所以一般将js文件写在body标签底部。但是有些浏览器会几乎同时加载css和不影响dom结构的js,等这些文件加载后再加载剩余js文件。

重绘以及回流

定义

重绘:对某个区域、对象的重新渲染表现

回流:对某个区域、对象进行重绘,根据条件影响到它的祖先对象进入重绘(并可能无限递归直到顶级祖先对象)

触发

重绘如何出现:改变对象的形状、坐标、表现以及内容都会引发该对象被重新渲染,这种现象即为重绘。

回流如何出现:当该对象即将重绘时,浏览器会根据条件判断该对象的重绘结果是否会依赖该对象的祖先元素。如果有则将该对象祖先元素也加入本次重绘。并一直向上寻找,直到条件不匹配。此现象即为回流。

最后总结:
1、重绘可能引发回流
2、回流必定引发重绘

引发重绘和回流的操作

优化回流

浏览器本身的优化策略:浏览器会维护1个队列,把所有会引起回流、重绘的操作放入这个队列,等队列中的操作到了一定的数量或者到了一定的时间间隔,浏览器就会flush队列,进行一个批处理。这样就会让多次的回流、重绘变成一次回流重绘。但有时候我们写的一些代码可能会强制浏览器提前flush队列,这样浏览器的优化可能就起不到作用了。当你请求向浏览器请求一些 style信息的时候,就会让浏览器flush队列。

所以我们要减少对render tree的操作(合并多次多DOM和样式的修改),并减少对一些style信息的请求,尽量利用好浏览器的优化策略

上一篇下一篇

猜你喜欢

热点阅读