涉及到操作大量Dom节点及其样式时,有时感觉画面不顺畅,殊不知浏览器亚历山大了。所以我们心里面一定得清楚 Reflow(回流)、Repaint(重绘)。

浏览器根据每个Dom节点的样式,包括(大小,颜色,位置等等),计算出各个节点应该在页面上展示的位置,占据的空间,这个过程可以称之为Reflow(回流);当节点的位置,空间确定好以后,浏览器便把这些节点按照各自的样子绘制在页面上,这个过程称之为Repaint(重绘);

触发Reflow

    • Dom节点的添加、修改(内容)、删除( Reflow + Repaint)
    • 操作 class 属性
    • 设置 style 属性的值
    • 读取元素的某些属性(offsetLeft、offsetTop、offsetHeight、offsetWidth、scrollTop/Left/Width/Height、clientTop/Left/Width/Height、getComputedStyle()、currentStyle(in IE))

看来我们操作Dom节点,基本上都会触发Reflow,触发Reflow必然也会触发Repaint。而Reflow是影响性能的关键。因此我们要想办法,尽量减少reflow的次数。

触发Repaint

只要修改Dom节点,影响了其外观样式,就会触发Repaint。

性能优化---避免频繁操作document上的节点

    • 先将节点从document中删除,修改后再把节点放回原来的位置
    • 先将节点的display设置为none,修改后再把节点的display修改为原来的值
    • 如需创建多个Dom节点,可以使用DocumentFragment

性能优化---集中修改样式

    • 尽可能少的修改元素style上的属性
    • 尽量通过修改className来修改样式
    • 通过cssText属性来设置样式值

性能优化---缓存layout值

每次读取元素的offsetWidth、offsetHeight等属性,浏览器都会重新计算,如果不需要时时获取最新状态,可以将其值存放在变量中。

性能优化---使节点脱离文档流

将元素的position设置为absolute和fixed,可以使元素从Dom树结构中脱离出来独立的存在,而浏览器在需要渲染时只需要渲染该元素以及位于该元素下方的元素。

操作Dom节点,任重而道远!

Reflow、Repaint 性能优化的更多相关文章

  1. javascript性能优化-repaint和reflow

    repaint(重绘) ,repaint发生更改时,元素的外观被改变,且在没有改变布局的情况下发生,如改变outline,visibility,background color,不会影响到dom结构渲 ...

  2. 性能优化之reflow和repaint

    本文主要介绍一下什么是reflow,repaint, 怎样避免它们造成的不良影响, 怎么通过工具查看分析它们. 一.首先对浏览器渲染引擎下网页呈现过程简要说一下: 浏览器的渲染引擎开始解析html构建 ...

  3. 前端性能优化 —— reflow(回流)和repaint(重绘)

    简要:整个在浏览器的渲染过程中(页面初始化,用户行为改变界面样式,动画改变界面样式等)reflow(回流)和repaint(重绘) 会大大影响web性能,尤其是手机页面.因此我们在页面设计的时候要尽量 ...

  4. 前端性能优化-减少http请求,dns预解析,减少repaint和reflow

    前端性能优化方法: 一 . 减少http请求 (1)通过合并图片,减少请求,俗称css sprites(css精灵)css sprites (2)lazyload懒加载,在需要的时候再加载 1.定义: ...

  5. 前端性能优化 —— reflow(回流/重排)和repaint(重绘)

    简要:整个在浏览器的渲染过程中(页面初始化,用户行为改变界面样式,动画改变界面样式等)reflow(回流)和repaint(重绘) 会大大影响web性能,尤其是手机页面.因此我们在页面设计的时候要尽量 ...

  6. 【转】javascript性能优化-repaint和reflow

    repaint(重绘) ,repaint发生更改时,元素的外观被改变,且在没有改变布局的情况下发生,如改变outline,visibility,background color,不会影响到dom结构渲 ...

  7. 前端性能优化----reflow(回流)和repaint(重绘)

    什么是reflow和repaint(原文链接:http://www.cnblogs.com/Peng2014/p/4687218.html) reflow:例如某个子元素样式发生改变,直接影响到了其父 ...

  8. ♫【网站优化】Reflow / Repaint

    web移动开发最佳实践之js篇 浏览器的回流与重绘 by 张盛志 DOM性能瓶颈与Javascript性能优化 浏览器的渲染原理简介 其中一个跟浏览器有关的原因,那就是浏览器需要花时间.花精力去渲染. ...

  9. 如何优化你的JS脚本来减少reflow/repaint?

    如何优化你的脚本来减少reflow/repaint?1. 避免在document上直接进行频繁的DOM操作,如果确实需要可以采用off-document的方式进行,具体的方法包括但不完全包括以下几种: ...

随机推荐

  1. zoj 3365 灵活数字规律

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3365 #include <cstdio> #incl ...

  2. C++设计模式---职责链模式

    职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿这条链传递该请求,直到有一个对象处理它为止. 这里发出这个请求的客户端并不知道这当中的哪一 ...

  3. JSP中的路径

    我的原则 所有路径一律使用绝对路径,就是以"/"开头的或者带host的路径.形如: /imgs/1.jpg <%= request.getContextPath()%> ...

  4. 提取HTML的正文类

    本文转载:http://blog.csdn.net/cjh200102/article/details/6824895 //2.提取html的正文 类 using System; using Syst ...

  5. poj2239 Selecting Courses --- 二分图最大匹配

    匈牙利算法模板题 有n门课程,每门课程可能有不同一时候间,不同一时候间的课程等价. 问不冲突的情况下最多能选多少门课. 建立二分图,一边顶点表示不同课程,还有一边表示课程的时间(hash一下). #i ...

  6. MVC模式实现登录以及增删改查之登录(一)

    我在这里用的不是maven项目,用的一般的web项目,所以需要用到的架包需要自己去下载添加,在项目中,一定注意环境的配置,我用的是jre1.7 1  新建项目 2  建立好MVC的管理包,导入对应的架 ...

  7. AutoBackupForApps

    This sample demonstrates how to selectively disable Automatic Backups in Android M, either by adjust ...

  8. vsftp配置主动模式和被动模式

    配置文件:/etc/vsftpd/vsftpd.conf 主动模式配置方法: 主动式连接使用的数据通道 connect_from_port_20=YES 支持数据流的被动式连接模式 pasv_enab ...

  9. 说说oracle的 sysdate、trunc函数

    SQL> select trunc(sysdate)+1/24+3 from dual; TRUNC(SYSDATE)+1/24-------------------2015-08-14 01: ...

  10. 自定义Back返回键(实现按两次返回键退出程序)

    实现机制:当用户点击物理返回键时,Activity会调用onBackPressed(),只需在Activity中复写该方法即可 以下是代码实现: package com.example.qjm3662 ...