今天在看文档的时候,看到render tree这个词很陌生,之前只知道dom tree,后来特意百度了一下。原来很简单就是dom tree和css样式结构的综合体,页面元素为一个具有填充、边距、边框和位置的盒子。因此render tree和dom tree的区别就在于render tree的节点有样式。
然后细看之下有两个比较有意思的名词:回流,重绘。
官方解释:当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流。当render tree中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘。
所以,显而易见的是:回流必将引起重绘,而重绘不一定会引起回流。
在这里优化就是要减少回流和重绘:
- 直接改变className,如果动态改变样式,则使用cssText(考虑没有优化的浏览器)
- 让要操作的元素进行”离线处理”,处理完后一起更新.
- 不要经常访问会引起浏览器flush队列的属性,如果你确实要访问,利用缓存。
- 让元素脱离动画流,减少回流的Render Tree的规模