`

浏览器的重绘[repaints]与重排[reflows]

 
阅读更多
浏览器下载完页面中的所有组件----HTML标记,Js,CSS,图片等之后会解析并生成两个内部数据结构: 
  DOM树  -------- 表示页面结构,解析HTML文档来构建
  渲染树 -------- 表示DOM节点如何显示,根据DOM元素的几何属性构建

   渲染树的每个节点都有大小和边距等属性,类似于盒子模型(由于隐藏元素不需要显示,渲染树中并不包含DOM树中隐藏的元素)。当渲染树构建完成后,浏览器就可以将元素放置到正确的位置了,再根据渲染树节点的样式属性绘制出页面。

重绘和重排是什么?

     重绘是一个元素外观的改变所触发的浏览器行为,如改变vidibility、outline、背景色等属性。浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。重绘不会带来重新布局,并不一定伴随重排。就是重新构造渲染树


      重排是更明显的一种改变,可以理解为渲染树需要重新计算。就是完成重排后,浏览器会重新绘制受影响的部分到屏幕中。

触发重排的操作有哪些?

   1. DOM元素的几何属性变化:元素内容、位置、尺寸的改变
   2. DOM树的结构变化:添加或删除可见的DOM元素
   3. 页面渲染器初始化
   4. 浏览器窗口尺寸的改变
   5. 获取一些属性时,浏览器为取得正确的值也会触发重排。这样就使得浏览器的优化失效了。这些属性包括:offsetTop、offsetLeft、 offsetWidth、offsetHeight、scrollTop、scrollLeft、scrollWidth、scrollHeight、clientTop、clientLeft、clientWidth、clientHeight、getComputedStyle() (currentStyle in IE)。所以,在多次使用这些值时应进行缓存。

如何避免?

    所以开发过程中应该尽量减少重排次数和缩小重排的影响范围:
1.将多次改变样式属性的操作合并成一次操作
2. 将需要多次重排的元素,position属性设为absolute或fixed,元素脱离了文档流,它的变化不会影响到其他元素。如有动画效果的元素就最好设置为绝对定位。
3. 在内存中多次操作节点,完成后再添加到文档中去。如构建整个表格的html片段,再一次性添加到文档中去。
4. 如果要对一个元素进行复杂的操作时,可以先隐藏它,操作完成后再显示。这样只在隐藏和显示时触发2次重排。
5. 在需要经常取那些引起浏览器重排的属性值时,缓存到变量。

参考:
http://zhangyaochun.iteye.com/blog/1681641
http://www.aliued.cn/2012/11/12/%E6%B5%8F%E8%A7%88%E5%99%A8%E7%9A%84%E9%87%8D%E7%BB%98repaints%E4%B8%8E%E9%87%8D%E6%8E%92reflows.html
  • 大小: 164.4 KB
  • 大小: 152 KB
分享到:
评论

相关推荐

    浏览器的重绘repaints与重排reflows深入分析

    主要原因是这些效果通常会产生一系列的浏览器重绘和重排,需要付出高昂的性能代价。那么,什么是浏览器的重绘和重排呢?二者何时发生以及如何权衡?如何在具体的开发过程中将重绘和重排引发的性能问题考虑进去?本文...

    Euro Truck Simulator 2 GamesAry Repaints:GamesAry 重绘现在可用于-开源

    现已推出适用于 Euro Truck Simulator 2 标准卡车的 GamesAry 重绘。 这包括为以下卡车和拖车重新喷漆: Daf XF 梅赛德斯奔驰 Actros 2009 Iveco Hi-Way Iveco Stralis MAN Tgx Renault 2009 Reanault Premium ...

    优化浏览器渲染 指定图片尺寸

    为页面中所有图片指定宽度和高度可以消除不必要的reflows和重新绘制页面【repaints】,使页面渲染速度更快。

    英文原版-AdvancED CSS 1st Edition

    Learn how to group logically related declarations, minify style sheets, and prevent performance bottle necks such as reflows and repaints. With support for CSS enjoying unprecedented ubiquity, you ...

    用Delphi实现Word文件的预览

    使用DELHPI的设计与编程来实现与WORD的结合,达到控制的目的。 您不必从文件中读取所有的图像 ? 您可以创建自己的图像。要创建自己的图像,最灵活的方法是用一个 BufferedImage 对象,它是 Image 类的一个子类,...

    DevExpress VCL 12.2.6(v2012vol2.6) 源码-例子-帮助-part1

    Q492229 - Activating an MDI child window always repaints it, regardless of the bar manager's AlwaysMerge property value Q490246 - Changing a bar item's Visible property when a form is being destroyed ...

    DevExpress VCL 12.2.6(v2012vol2.6) 源码-例子-帮助-part2

    Q492229 - Activating an MDI child window always repaints it, regardless of the bar manager's AlwaysMerge property value Q490246 - Changing a bar item's Visible property when a form is being destroyed ...

Global site tag (gtag.js) - Google Analytics