浏览器下载完页面中的所有组件----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)和重绘(repaints)。重排是指浏览器重新计算文档中元素的位置和几何形状,而重绘则是重新绘制页面上的...
现已推出适用于 Euro Truck Simulator 2 标准卡车的 GamesAry 重绘。 这包括为以下卡车和拖车重新喷漆: Daf XF 梅赛德斯奔驰 Actros 2009 Iveco Hi-Way Iveco Stralis MAN Tgx Renault 2009 Reanault Premium ...
这意味着需要减少不必要的DOM操作和浏览器重绘(repaints)和回流(reflows)。 6. 源码公开:提供源码供用户下载,可以让有兴趣的开发者深入学习JavaScript的应用,并提升自己的编程技巧。 总结来说,纯...
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 ...
使用DELHPI的设计与编程来实现与WORD的结合,达到控制的目的。 您不必从文件中读取所有的图像 ? 您可以创建自己的图像。要创建自己的图像,最灵活的方法是用一个 BufferedImage 对象,它是 Image 类的一个子类,...
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 ...
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 ...