摘自:http://www.68design.net/Web-Guide/HTMLCSS/46924-1.html
浏览器为了重新渲染部分或整个页面,重新计算页面元素位置和几何结构(geometries)的进程叫做 reflow。由于 reflow 是一种浏览器中的用户拦截(user-blocking)操作,所以了解如何减少 reflow 次数,及不同的文档属性(DOM 层级(DOM depth),CSS 效率,不用类型的 style 变化)对 reflow 次数的影响对开发者来说非常必要。有时 reflow 页面中的一个元素会 reflow 它的父元素(译注:这里是复数)以及所有子元素。
有多种用户操作和 DHTML 变化可能会触发 reflow。调整浏览器窗口的大小,用 javascript 计算样式(computed styles),在 DOM 中创建删除元素,改变元素的 class 都会触发 reflow。值得注意的是,有些操作会多次触发 reflow,超出你的想象。下图源自 Steve Souders 的演讲 "Even Faster Web Sites":
从上表可以很明显的看出,在所有浏览器中并非所有 javascript 控制的样式都触发 reflow,即使触发了触发的次数也不尽相同。同时可以看出现代浏览器在控制 reflow 次数方面做的越来越好。
在 Google,我们通过多种方式对我们的页面及 Web 应用测速,同时 reflow 是我们增加 UI 时考虑的一个关键因素。我们致力于传达轻快的(lively),交互性强的(interactive)和令人愉悦的(delightful)的用户体验。
原则
下面是一些减小 reflow 的原则:
- 减少不必要的 DOM 层级(DOM depth)。改变 DOM 树中的一级会导致所有层级的改变,上至根部,下至被改变节点的子节点。这导致大量时间耗费在执行 reflow 上面。
- 尽量减少 CSS 规则,去除未用到的 CSS。
- 如果做复杂的表现变化,如动画,让它脱离文档流。用绝对定位或 fixed 定位来完成。
- 避免不必要的复杂的 CSS 选择器,尤其是后代选择器(descendant selectors),因为为了匹配选择器将耗费更多的 CPU。
在下面的视频中(译注:引用自 youtube,无法观看,请到原文翻,墙),Lindsey 介绍了一些减少 reflow 的方法。
延伸阅读
译文原文:http://www.99css.com/2009/06/minimizing-browser-reflow.html
分享到:
相关推荐
总的来说,理解`reflow`和`repaint`的原理,并通过优化DOM操作、样式修改、缓存属性和利用定位属性等方式,可以有效地减少浏览器的渲染负担,提高网页性能。在实际开发中,开发者应当养成良好的编程习惯,时刻关注...
此外,尽量将修改样式属性的操作集中,避免分散在JavaScript代码中,也可以减少reflow的次数。 在理解了HTML解析原理后,前端开发者可以通过调整代码结构、合理使用CSS选择器、延迟加载非关键资源等方法来提升网页...
5. **优化策略**:为了提高页面性能,开发者应尽量减少reflow。例如,为图片预先设定宽高可以避免加载时的布局调整。此外,通过CSS3的硬件加速特性、延迟加载技术等,也能有效减少回流和重绘的发生。 6. **事件触发...
8. **代码导出**:完成设计后,Edge Reflow可以生成干净的HTML和CSS代码,这些代码可以直接用于开发阶段,减少了从设计到开发的转换时间。 总的来说,Adobe Edge Reflow Preview是一个强大的网页设计工具,它简化了...
接着,JavaScript部分的内容也很丰富,包括了基础知识(如作用域、闭包、原型链)、编程范式(如面向对象编程)、异步编程(如事件循环、Promise)、前端性能优化(如减少reflow)、跨域解决方案、前端框架(如...
### Standard Reflow Profile知识点 #### 一、标准回流焊简介 回流焊是一种通过将焊膏熔化形成金属间化合物来实现电子元器件与电路板之间电气连接的技术。本文件详细介绍了适用于标准封装和无铅封装的标准回流焊...
它避免了不必要的重绘,通过计算文本的最小变更量来减少动画对UI主线程的影响。此外,它还支持异步动画,可以在后台线程中进行文本的预处理,进一步提高性能。 六、案例分析 博客中提供的项目示例展示了Reflow ...
了解了这些概念和知识点之后,开发者应该在编写CSS和JavaScript代码时尽量避免不必要的reflow操作,例如在确定图片尺寸的情况下提前指定宽高,使用visibility代替display来切换元素可见性,以及尽量减少DOM操作等,...
因此,为了减少reflow和repaint的影响,内联样式块也应该放置在中。 关于标签,HTML 4.01规范强烈建议将外部样式表链接放在部分。使用标签引入CSS文件,而不是使用CSS的@import规则,因为@import会导致额外的HTTP...
3. 减少reflow(回流):相对于float,position在某些情况下能够减少浏览器进行布局计算的次数,因为position使元素脱离了文档流。 但是,使用position也存在一些潜在的问题: 1. 有人说耗性能:关于这一点,目前...
**如何避免或减少Repaint和Reflow:** 1. **离线操作**:先移除元素,完成修改后再放回,减少对页面的影响。 2. **隐藏元素**:通过设置`display: none`,修改后再恢复,避免实时计算布局。 3. **使用...
git-reflow –自动执行git工作流程(2015福冈Ruby奖得主) ... 减少交付出色代码所需的知识。 拥有干净且实际可用的提交历史记录。 轻松还原功能(如果需要)。 与多样化的团队合作,而不必担心不同的流程。
这样的自动化流程可以减少人为错误,提高代码质量,并让团队成员更多地专注于创新和解决问题。 git_reflow的核心功能包括: 1. **代码审查**:它使得创建Pull Request(PR)的过程更加便捷,帮助团队成员审查和...
优先修改层级比较低的DOM节点也能够减少重排的范围,但有时候也会造成大面积的Reflow,因此需要具体情况具体分析。 在实际开发中,动画效果往往会频繁触发Repaint和Reflow。为减少这种影响,可以使用position属性的...
在前端性能优化的领域中,回流(Reflow)与重绘(Repaint)是非常关键的概念。它们是浏览器渲染过程中最常见、也最影响性能的两个步骤。为了深入理解这两个概念,我们首先需要了解浏览器的渲染流程。 在用户通过...
1. 浏览器渲染机制 2. 重绘 3. 回流 4. 浏览器优化 5. 减少重绘与回流
使用微控制器上的 PWM 输出,继电器以不同的频率切换开/关,以增加/减少温度变化率。 我找到了一些焊膏,并实施了一个基于计时器的算法来模拟焊料曲线。 该算法根据烤箱状态和经过时间调整 PWM。 预热 浸泡 回流 ...
SnAgCu系列焊料中银(Ag)的含量增加能降低表面张力,从而改善润湿性,减少元器件抬起的可能性。此外,理解和优化焊料的润湿力、润湿时间和熔化行为也是控制“立碑”现象的关键步骤。在实际生产中,结合材料科学、...
在编写JavaScript代码时,应尽量减少DOM操作,合理使用Repaint和Reflow技术,以减少性能损耗;在数据交换和存储时,尽量使用JSON格式来提高数据处理效率。 总之,Web前端性能优化是一个系统工程,需要前端工程师...