javascript性能优化之DOM交互操作实例分析


Posted in Javascript onDecember 12, 2015

本文实例讲述了javascript性能优化之DOM交互操作技巧。分享给大家供大家参考,具体如下:

在javascript各个方面,DOM毫无疑问是最慢的一部分。DOM操作与交互要耗费大量时间,因为它们往往需要重新渲染整个页面或者某一部分。理解如何优化与DOM的交互可以极大提高脚本完成的速度。

1、最小化DOM更新

看下面例子:

var list = document.getElementById("ul");
for (var i=0; i < 10; i++){
  var item = document.createELement("li");
  item.appendChild(document.createTextNode("item" + i));
  list.appendChild(item);
}
//这段代码为列表添加10个项目。添加每个项目时,都有两次DOM更新。总共需要20次DOM更新。

我们可以使用 文档碎片 来最小化DOM更新。

var list = document.getElementById("ul");
var fragment = document.createDocumentFragment();
for (var i=0; i < 10; i++){
  var item = document.createELement("li");
  item.appendChild(document.createTextNode("item" + i));
  fragment.appendChild(item);
}
list.appendChild(fragment);

更多关于 文档碎片,详见之前文章 《JavaScript文档碎片操作实例分析》

2、使用innerHTML

对于比较大的DOM更改,使用innerHTML要比createElement()和appendChild()快。

var list = document.getElementById("ul");
var html = "";
for (var i=0; i < 10; i++){
  html += "<li>item" + i + "<li>";
}
list.innerHTML = html;

3、使用事件委托

详见之前文章 《javascript性能优化之事件委托实例详解》

4、注意NodeList

最小化访问NodeList的次数可以极大的改进脚本的性能,因为每次访问NodeList,都会运行一次基于文档的查询。

var imgs = document.getElementsByTagName("img");
for (var i=0, len=imgs.length; i < len; i++){
  var image = imgs[i];
  //more code
}
//这里的关键是长度length存入了len变量,而不是每次都去访问NodeList的length属性。当在循环中使用NodeList的时候,把imgs[i]放入image变量中,以避免在循环体内多次调用NodeList;

更多关于 NodeList,详见之前文章 《在javascript将NodeList作为Array数组处理的方法》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
Jan 15 Javascript
jQuery表格插件datatables用法汇总
Mar 29 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
Apr 17 Javascript
JS原型对象的创建方法详解
Jun 16 Javascript
聊一聊JS中this的指向问题
Jun 17 Javascript
原生Javascript插件开发实践
Jan 18 Javascript
原生js开发的日历插件
Feb 04 Javascript
常用的js方法合集
Mar 10 Javascript
微信小程序开发图片拖拽实例详解
May 05 Javascript
webpack学习--webpack经典7分钟入门教程
Jun 28 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
Mar 06 Javascript
详解小程序云开发攻略(解决最棘手的问题)
Sep 30 Javascript
JavaScript文档碎片操作实例分析
Dec 12 #Javascript
javascript性能优化之事件委托实例详解
Dec 12 #Javascript
jsonp跨域请求数据实现手机号码查询实例分析
Dec 12 #Javascript
jQuery Validate初步体验(二)
Dec 12 #Javascript
jQuery Validate初步体验(一)
Dec 12 #Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
Dec 12 #Javascript
jQuery同步提交示例代码
Dec 12 #Javascript
You might like
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
PHP发送短信代码分享
2015/08/11 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
numpy matrix和array的乘和加实例
2018/06/28 Python
Python中正则表达式的用法总结
2019/02/22 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
python中的global关键字的使用方法
2019/08/20 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
会计专业自我鉴定范文
2013/10/06 职场文书
体育馆的标语
2014/06/24 职场文书
单位活动策划方案
2014/08/17 职场文书
看雷锋电影观后感
2015/06/10 职场文书
2016年端午节红领巾广播稿
2015/12/18 职场文书
改进工作作风心得体会
2016/01/23 职场文书
创业计划书之寿司
2019/07/19 职场文书
导游词之贵州织金洞
2019/10/12 职场文书
Html分层的box-shadow效果的示例代码
2021/03/30 HTML / CSS
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js