`
荷戟者
  • 浏览: 278533 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

减少reflow

 
阅读更多

摘自: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 的原则:

  1. 减少不必要的 DOM 层级(DOM depth)。改变 DOM 树中的一级会导致所有层级的改变,上至根部,下至被改变节点的子节点。这导致大量时间耗费在执行 reflow 上面。
  2. 尽量减少 CSS 规则,去除未用到的 CSS。
  3. 如果做复杂的表现变化,如动画,让它脱离文档流。用绝对定位或 fixed 定位来完成。
  4. 避免不必要的复杂的 CSS 选择器,尤其是后代选择器(descendant selectors),因为为了匹配选择器将耗费更多的 CPU。

在下面的视频中(译注:引用自 youtube,无法观看,请到原文翻,墙),Lindsey 介绍了一些减少 reflow 的方法。

延伸阅读

译文原文:http://www.99css.com/2009/06/minimizing-browser-reflow.html

分享到:
评论

相关推荐

    如何减少浏览器的reflow和repaint

    总的来说,理解`reflow`和`repaint`的原理,并通过优化DOM操作、样式修改、缓存属性和利用定位属性等方式,可以有效地减少浏览器的渲染负担,提高网页性能。在实际开发中,开发者应当养成良好的编程习惯,时刻关注...

    HTML解析原理.pdf

    此外,尽量将修改样式属性的操作集中,避免分散在JavaScript代码中,也可以减少reflow的次数。 在理解了HTML解析原理后,前端开发者可以通过调整代码结构、合理使用CSS选择器、延迟加载非关键资源等方法来提升网页...

    HTML解析原理.docx

    5. **优化策略**:为了提高页面性能,开发者应尽量减少reflow。例如,为图片预先设定宽高可以避免加载时的布局调整。此外,通过CSS3的硬件加速特性、延迟加载技术等,也能有效减少回流和重绘的发生。 6. **事件触发...

    Adobe Edge Reflow Preview下载

    8. **代码导出**:完成设计后,Edge Reflow可以生成干净的HTML和CSS代码,这些代码可以直接用于开发阶段,减少了从设计到开发的转换时间。 总的来说,Adobe Edge Reflow Preview是一个强大的网页设计工具,它简化了...

    前端基础面试题.pdf

    接着,JavaScript部分的内容也很丰富,包括了基础知识(如作用域、闭包、原型链)、编程范式(如面向对象编程)、异步编程(如事件循环、Promise)、前端性能优化(如减少reflow)、跨域解决方案、前端框架(如...

    Standard Reflow Profile

    ### Standard Reflow Profile知识点 #### 一、标准回流焊简介 回流焊是一种通过将焊膏熔化形成金属间化合物来实现电子元器件与电路板之间电气连接的技术。本文件详细介绍了适用于标准封装和无铅封装的标准回流焊...

    reflow-animator.zip

    它避免了不必要的重绘,通过计算文本的最小变更量来减少动画对UI主线程的影响。此外,它还支持异步动画,可以在后台线程中进行文本的预处理,进一步提高性能。 六、案例分析 博客中提供的项目示例展示了Reflow ...

    CSS reflow实例教程

    了解了这些概念和知识点之后,开发者应该在编写CSS和JavaScript代码时尽量避免不必要的reflow操作,例如在确定图片尺寸的情况下提前指定宽高,使用visibility代替display来切换元素可见性,以及尽量减少DOM操作等,...

    将样式表放在页面顶部

    因此,为了减少reflow和repaint的影响,内联样式块也应该放置在中。 关于标签,HTML 4.01规范强烈建议将外部样式表链接放在部分。使用标签引入CSS文件,而不是使用CSS的@import规则,因为@import会导致额外的HTTP...

    position替代部分float进行网页元素定位

    3. 减少reflow(回流):相对于float,position在某些情况下能够减少浏览器进行布局计算的次数,因为position使元素脱离了文档流。 但是,使用position也存在一些潜在的问题: 1. 有人说耗性能:关于这一点,目前...

    有关javascript的性能优化 (repaint和reflow)

    **如何避免或减少Repaint和Reflow:** 1. **离线操作**:先移除元素,完成修改后再放回,减少对页面的影响。 2. **隐藏元素**:通过设置`display: none`,修改后再恢复,避免实时计算布局。 3. **使用...

    gitreflow:Reflow自动创建请求请求,确保代码审查获得批准,并且squash将完成的分支合并到具有出色提交消息模板的主服务器

    git-reflow –自动执行git工作流程(2015福冈Ruby奖得主) ... 减少交付出色代码所需的知识。 拥有干净且实际可用的提交历史记录。 轻松还原功能(如果需要)。 与多样化的团队合作,而不必担心不同的流程。

    Ruby-gitreflow敏捷团队的自动化质量控制流程

    这样的自动化流程可以减少人为错误,提高代码质量,并让团队成员更多地专注于创新和解决问题。 git_reflow的核心功能包括: 1. **代码审查**:它使得创建Pull Request(PR)的过程更加便捷,帮助团队成员审查和...

    JavaScript中的Repaint和Reflow用法详解

    优先修改层级比较低的DOM节点也能够减少重排的范围,但有时候也会造成大面积的Reflow,因此需要具体情况具体分析。 在实际开发中,动画效果往往会频繁触发Repaint和Reflow。为减少这种影响,可以使用position属性的...

    渲染篇 5:最后一击——回流(Reflow)与重绘(Repaint)(1).md

    在前端性能优化的领域中,回流(Reflow)与重绘(Repaint)是非常关键的概念。它们是浏览器渲染过程中最常见、也最影响性能的两个步骤。为了深入理解这两个概念,我们首先需要了解浏览器的渲染流程。 在用户通过...

    sisterAn#blog#浏览器的重绘与回流(Repaint、Reflow)1

    1. 浏览器渲染机制 2. 重绘 3. 回流 4. 浏览器优化 5. 减少重绘与回流

    reflow-toaster:用于回流焊接的烤箱

    使用微控制器上的 PWM 输出,继电器以不同的频率切换开/关,以增加/减少温度变化率。 我找到了一些焊膏,并实施了一个基于计时器的算法来模拟焊料曲线。 该算法根据烤箱状态和经过时间调整 PWM。 预热 浸泡 回流 ...

    控制无铅焊料合金组成,减少无铅焊接"立碑"现象

    SnAgCu系列焊料中银(Ag)的含量增加能降低表面张力,从而改善润湿性,减少元器件抬起的可能性。此外,理解和优化焊料的润湿力、润湿时间和熔化行为也是控制“立碑”现象的关键步骤。在实际生产中,结合材料科学、...

    WEB前端工程师Web前端性能优化经验分享

    优化方法包括避免直接修改样式属性,使用CSS类来改变样式,以及将有动画效果的元素设置为fixed或absolute定位以减少对布局的影响。 3. 减少DOM操作 DOM操作是性能敏感的,频繁的读写会导致重绘和重排,影响性能。...

Global site tag (gtag.js) - Google Analytics