浏览器以普通HTML页面为例:解析HTML文档,生成dom树,解析css,生成css规则树,解析JavaScript,并通过DOM-API操作dom树和css规则树通过dom树和css规则树构建渲染树(renderingtree)调用操作系统的GUI界面绘制页面回流(reflow)和重绘(repaint))reflow:元素大小,位置发生变化时,会重新计算渲染树,页面需要重新排版。这个过程就是回流焊。重绘:元素做了一些不影响布局的改变,如背景色、下划线等,只需要重绘,称为重绘。很明显,回流的代价大于重绘,因为重绘只是重绘元素,而重绘是重计算+重绘。回流原因:初始。页面初始化时。增加的。当一些Javascript正在操作DOM树时。调整大小。一些组件的大小改变了StyleChange。如果CSS属性已更改。肮脏的。同一个元素的子树上发生多次增量回流。更具体地说,这些常见操作会导致回流:调整窗口大小、字体大小、样式表更改、元素内容更改,特别是输入控件的CSS伪类的激活、用户交互过程中的DOM操作、DOM元素的添加和删除,以及修改width,clientWidth,scrollTop等布局宽高计算ps:但是浏览器不会在我们执行以上操作后立即回流,浏览器会积累一批回流然后一起回流,但是有些操作会让浏览器立即执行reflow,比如resizewindow,改变页面的默认字体,或者在IE中获取如下值:offsetTop,offsetLeft,offsetWidth,offsetHeightscrollTop/Left/Width/HeightclientTop/Left/Width/HeightGetComputedStyle(),或者如何减少currentStylereflow和repaint避免频繁修改样式,可以将多个要修改的样式定义为一个类,然后给类名赋值e一次离线操作dom:使用documentFragment对象操作内存中的DOM先把DOM给display:none(有回流),然后你想怎么改就怎么改。比如修改100次,再显示。克隆一个DOM节点到内存中,然后根据需要更改它。修改好后,和网上的交换一下。不要将DOM节点的属性值作为循环中的变量放入循环中。否则会导致对该节点属性的大量读写。对动画HTML元素使用固定或绝对位置,然后修改它们的CSS将不会回流,因为它与文档流引用分离以减少重排和重绘浏览器的渲染原理介绍
