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


Posted in Javascript onApril 12, 2013
 repaint(重绘) ,repaint发生更改时,元素的外观被改变,且在没有改变布局的情况下发生,如改变outline,visibility,background color,不会影响到dom结构渲染。
reflow(渲染),与repaint区别就是他会影响到dom的结构渲染,同时他会触发repaint,他会改变他本身与所有父辈元素(祖先),这种开销是非常昂贵的,导致性能下降是必然的,页面元素越多效果越明显。
何时发生:
. DOM元素的添加、修改(内容)、删除( Reflow + Repaint)
. 仅修改DOM元素的字体颜色(只有Repaint,因为不需要调整布局)
. 应用新的样式或者修改任何影响元素外观的属性
. Resize浏览器窗口、滚动页面
. 读取元素的某些属性(offsetLeft、offsetTop、offsetHeight、offsetWidth、 scrollTop/Left/Width/Height、clientTop/Left/Width/Height、 getComputedStyle()、currentStyle(in IE)) 
如何避免:
. 先将元素从document中删除,完成修改后再把元素放回原来的位置
. 将元素的display设置为”none”,完成修改后再把display修改为原来的值
. 如果需要创建多个DOM节点,可以使用DocumentFragment创建完后一次性的加入document 

var fragment = document.createDocumentFragment();
fragment.appendChild(document.createTextNode('keenboy test 111'));
fragment.appendChild(document.createElement('br'));
fragment.appendChild(document.createTextNode('keenboy test 222'));
document.body.appendChild(fragment);
. 集中修改样式 

4.1尽可能少的修改元素style上的属性 

4.2尽量通过修改className来修改样式

4.3通过cssText属性来设置样式值


element.style.width=”80px”;  //reflow


element.style.height=”90px”; //reflow


element.style.border=”solid 1px red”; //reflow


以上就产生多次reflow,调用的越多产生就越多


element.style.cssText=”width:80px;height:80px;border:solid 1px red;”; //reflow 

4.4缓存Layout属性值 


var left=elem.offsetLeft; 多次使用left也就产生一次reflow

4.5设置元素的position为absolute或fixed


元素脱离标准流,也从DOM树结构中脱离出来,在需要reflow时只需要reflow自身与下级元素

4.6尽量不要用table布局


table元素一旦触发reflow就会导致table里所有的其它元素 reflow。在适合用table的场合,可以设置table-layout为auto或fixed,这样可以让table一行一行的渲染,这种做法也是为了限制reflow的影响范围

4.7避免使用expression,他会每次调用都会重新计算一遍(包括加载页面)
参考:
Yahoo! 性能工程师 Nicole Sullivan 在最新的文章 《Reflows & Repaints: CSS Performance making your JavaScript slow?》
Javascript 相关文章推荐
JavaScript 检测浏览器和操作系统的脚本
Dec 26 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
Mar 21 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
Apr 08 Javascript
jquery中对于批量deferred的处理方法
Jan 22 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
Jan 22 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
Feb 10 Javascript
java中String类型变量的赋值问题介绍
Mar 23 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
Sep 19 jQuery
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
Vue实现购物车场景下的应用
Nov 27 Javascript
微信小程序实现简单input正则表达式验证功能示例
Nov 30 Javascript
还不懂递归?读完这篇文章保证你会懂
Jul 29 Javascript
引用外部js乱码问题分析及解决方案
Apr 12 #Javascript
关于query Javascript CSS Selector engine
Apr 12 #Javascript
使用jQuery清空file文件域的解决方案
Apr 12 #Javascript
原生js实现查找/添加/删除/指定元素的class
Apr 12 #Javascript
jQuery contains过滤器实现精确匹配使用方法
Apr 12 #Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
Apr 12 #Javascript
Javascript实现滑块滑动改变值的实现代码
Apr 12 #Javascript
You might like
用来解析.htgroup文件的PHP类
2012/09/05 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
json数据与字符串的相互转化示例
2013/09/18 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
浅谈Node模块系统及其模式
2017/11/17 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
Javascript异步编程async实现过程详解
2020/04/02 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
python插入排序算法的实现代码
2013/11/21 Python
用Python实现换行符转换的脚本的教程
2015/04/16 Python
Python中set与frozenset方法和区别详解
2016/05/23 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
Python中super函数的用法
2017/11/17 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
使用HTML5 Canvas API控制字体的显示与渲染的方法
2016/03/24 HTML / CSS
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
SQL数据库笔试题
2016/03/08 面试题
木马的传播途径主要有哪些
2016/04/08 面试题
市级绿色学校申报材料
2014/08/25 职场文书
教师党员批评与自我批评
2014/10/15 职场文书