1. repaint(重绘) repaint发生更改时,元素的外观被改变,且在没有改变布局的情况下发生,如改变outline,visibility,background color,不会影响到dom结构渲染。
  2.  
  3. reflow(渲染),与repaint区别就是他会影响到dom的结构渲染,同时他会触发repaint,他会改变他本身与所有父辈元素(祖先),这种开销是非常昂贵的,导致性能下降是必然的,页面元素越多效果越明显。
  4.  
  5. 一、何时发生:
  6. . DOM元素的添加、修改(内容)、删除( Reflow + Repaint)
  7. . 仅修改DOM元素的字体颜色(只有Repaint,因为不需要调整布局)
  8. . 应用新的样式或者修改任何影响元素外观的属性
  9. . Resize浏览器窗口、滚动页面
  10. . 读取元素的某些属性(offsetLeftoffsetTopoffsetHeightoffsetWidth scrollTop/Left/Width/HeightclientTop/Left/Width/Height getComputedStyle()、currentStyle(in IE)) -- bootstrap.js中就通过读取元素 xx.offsetHeight/xx.offsetWidth force reflow
  11.  
  12. 二、如何避免:
  13. . 先将元素从document中删除,完成修改后再把元素放回原来的位置
  14. . 将元素的display设置为”none”,完成修改后再把display修改为原来的值
  15. . 如果需要创建多个DOM节点,可以使用DocumentFragment创建完后一次性的加入document   
  16.  
  17. var fragment = document.createDocumentFragment();
  18. fragment.appendChild(document.createTextNode('keenboy test 111'));
  19. fragment.appendChild(document.createElement('br'));
  20. fragment.appendChild(document.createTextNode('keenboy test 222'));
  21. document.body.appendChild(fragment);
  22.  
  23. . 集中修改样式
  24.    .1尽可能少的修改元素style上的属性
  25.    .2尽量通过修改className来修改样式
  26.    .3通过cssText属性来设置样式值
  27.     element.style.width=”80px”; //reflow
  28.     element.style.height=”90px”; //reflow
  29.     element.style.border=”solid 1px red”; //reflow
  30.     以上就产生多次reflow,调用的越多产生就越多
  31.     element.style.cssText=”width:80px;height:80px;border:solid 1px red;”; //reflow 
  32.    .4缓存Layout属性值
  33.     var left=elem.offsetLeft; 多次使用left也就产生一次reflow
  34.   .5设置元素的positionabsolutefixed
  35.     元素脱离标准流,也从DOM树结构中脱离出来,在需要reflow时只需要reflow自身与下级元素
  36.   .6尽量不要用table布局
  37.     table元素一旦触发reflow就会导致table里所有的其它元素 reflow。在适合用table的场合,可以设置table-layoutautofixed,这样可以让table一行一行的渲染,这种做法也是为了限制reflow的影响范围
  38.   .7避免使用expression,他会每次调用都会重新计算一遍(包括加载页面)
  39.  
  40. 参考:
  41.  
  42. Yahoo! 性能工程师 Nicole Sullivan 在最新的文章 Reflows & Repaints: CSS Performance making your JavaScript slow?

【转】javascript性能优化-repaint和reflow的更多相关文章

  1. javascript性能优化-repaint和reflow

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

  2. JavaScript性能优化

    如今主流浏览器都在比拼JavaScript引擎的执行速度,但最终都会达到一个理论极限,即无限接近编译后程序执行速度. 这种情况下决定程序速度的另一个重要因素就是代码本身. 在这里我们会分门别类的介绍J ...

  3. 摘:JavaScript性能优化小知识总结

    原文地址:http://www.codeceo.com/article/javascript-performance-tips.html JavaScript的性能问题不容小觑,这就需要我们开发人员在 ...

  4. Javascript 性能优化的一点技巧

    把优秀的编程方式当成一种习惯,融入到日常的编程当中.下图是今天想到的一点Javascript 性能优化的技巧,分享一下,抛砖引玉.

  5. JavaScript性能优化小窍门汇总(含实例)

    在众多语言中,JavaScript已经占有重要的一席之地,利用JavaScript我们可以做很多事情 , 应用广泛.在web应用项目中,需要大量JavaScript的代码,将来也会越来越多.但是由于J ...

  6. JavaScript性能优化小知识总结(转)

    JavaScript的性能问题不容小觑,这就需要我们开发人员在编写JavaScript程序时多注意一些细节,本文非常详细的介绍了一下JavaScript性能优化方面的知识点,绝对是干货. 前言 一直在 ...

  7. JavaScript性能优化篇js优化

    JavaScript性能优化篇js优化   随着Ajax越来越普遍,Ajax引用的规模越来越大,Javascript代码的性能越来越显得重要,我想这就是一个很典型的例子,上面那段代码因为会被频繁使用, ...

  8. DOM性能瓶颈与Javascript性能优化

    这两天比较闲,写了两篇关于JS性能缺陷与解决方案的文章(<JS特性性能缺陷及JIT的解决方案>,<Javascript垃圾回收浅析>),主要描述了untyped,GC带来的问题 ...

  9. JavaScript 性能优化技巧分享

    JavaScript 作为当前最为常见的直译式脚本语言,已经广泛应用于 Web 应用开发中.为了提高Web应用的性能,从 JavaScript 的性能优化方向入手,会是一个很好的选择. 本文从加载.上 ...

随机推荐

  1. SQL语句的执行计划(oracle表的三种链接方式)

    SQL语句我们写完之后,就是分析其优化,这就要求我们了解到底数据是怎么存储. 首先我们需要了解,表链接的几种方式 nested loop join sort merge join hash join ...

  2. linux下USB转串口驱动的安装

    ubuntu10.04,usb串口用的是moxa 1110 搞了半天没有驱动... 去官方下了个:http://www.moxa.com/support/sarch_result.aspx?type= ...

  3. gis 导出 dwg,shp

    当我们在webgis 想要把某个地块或者多个地块导出dwg或者shp文件的时候怎么办?这个时候最好就是用后台的方式.首先把web gis上的graphic 的polygon提取为坐标的形式(类似于x, ...

  4. 解决setInterval计时器不准的问题

    在js中如果打算使用setInterval进行倒数,计时等功能,往往是不准确的,因为setInterval的回调函数并不是到时后立即执行,而是等系统计算资源空闲下来后才会执行.而下一次触发时间则是在s ...

  5. FastDFS的安装配置

    一:实验描述: fastdfs 介绍 FastDFS是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别 ...

  6. cygwin中运行命令提示command not found的解决方法

    在cygwin下运行ls等linux常见命令时出现“command not found”的提示,原因是环境变量没有配置好,因此只要将环境变量配置正确,即可正常使用.举例说明,cygwin安装在C盘根目 ...

  7. (转)Java基础——嵌套类、内部类、匿名类

    本文内容分转自博客:http://www.cnblogs.com/mengdd/archive/2013/02/08/2909307.html 将相关的类组织在一起,从而降低了命名空间的混乱. 一个内 ...

  8. TCP/IP详解学习笔记(10)-- DNS:域名系统

    1.DNS      DNS 是计算机域名系统(Domain Name System 或Domain Name Service) 的缩写,它是由解析器以及域名服务器组成的.域名服务器是指保存有该网络中 ...

  9. highchart.js的使用

    highchart.js是一个很实用的图表插件,涵盖柱状图.曲线图,区域图.3D图.饼图.散列图.混合图等等,功能很强大. 首先去官网下载最新版highchart.js插件,中文网地址:http:// ...

  10. 5 Ways to Learn and Remember Absolutely Anything

    http://www.inc.com/quora/5-ways-to-learn-and-remember-absolutely-anything.html Start too early on th ...