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.Encode手动解码技巧
Jul 14 Javascript
jQuery 中国省市两级联动选择附图
May 14 Javascript
jquery 选取方法都有哪些
May 18 Javascript
JavaScript实现页面5秒后自动跳转的方法
Apr 16 Javascript
javascript中tostring()和valueof()的用法及两者的区别
Nov 16 Javascript
浅谈jquery中使用canvas的问题
Oct 10 Javascript
JavaScript易错知识点整理
Dec 05 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
Nov 24 Javascript
echarts实现词云自定义形状的示例代码
Feb 20 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
Apr 12 Javascript
Vue.js实现备忘录功能
Jun 26 Javascript
解决vue v-for src 图片路径问题 404
Nov 12 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
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
php封装的验证码工具类完整实例
2016/10/19 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
微信小程序 video组件详解
2016/10/25 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
基于vue cli 通过命令行传参实现多环境配置
2018/07/12 Javascript
微信小程序实现时间预约功能
2018/11/27 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
Python2/3中urllib库的一些常见用法
2017/12/19 Python
Python 忽略warning的输出方法
2018/10/18 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
用python求一重积分和二重积分的例子
2019/12/06 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
硕士研究生自我鉴定范文
2013/12/27 职场文书
出生医学证明样本
2014/01/17 职场文书
法律七进实施方案
2014/03/15 职场文书
大学生实习证明范本
2014/09/19 职场文书
反四风对照检查材料
2014/09/22 职场文书