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 相关文章推荐
与jquery serializeArray()一起使用的函数,主要来方便提交表单
Jan 31 Javascript
js生成随机数之random函数随机示例
Dec 20 Javascript
node.js不得不说的12点内容
Jul 14 Javascript
js中不同的height, top的区别对比
Sep 24 Javascript
原生js实现图片轮播特效
Dec 18 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
Jun 07 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
Jun 08 Javascript
JavaScript事件方法(实例讲解)
Jun 27 Javascript
动手写一个angular版本的Message组件的方法
Dec 16 Javascript
redux-saga 初识和使用
Mar 10 Javascript
微信小程序实现人脸识别
May 25 Javascript
解决vue跨域axios异步通信问题
Apr 17 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写的带缓存数据功能的mysqli类
2012/09/06 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
jQuery中wrapInner()方法用法实例
2015/01/16 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
2016/04/26 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
2016/05/13 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
Django自定义manage命令实例代码
2018/02/11 Python
Python 获取ftp服务器文件时间的方法
2019/07/02 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
pytorch实现查看当前学习率
2020/06/24 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
HTML5 File接口在web页面上使用文件下载
2017/02/27 HTML / CSS
网络安全方面的面试题
2016/01/07 面试题
物业管理公司实习生自我鉴定
2013/09/19 职场文书
总经理秘书工作职责
2013/12/26 职场文书
集体生日活动方案
2014/08/18 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
公司保密管理制度
2015/08/04 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android