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 相关文章推荐
JS 实现双色表格实现代码
Nov 24 Javascript
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
Mar 23 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
Feb 26 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
Apr 27 Javascript
javascript遇到html5的一些表单属性
Jul 05 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
May 18 Javascript
最原始的jQuery注册验证方式
Oct 11 Javascript
jQuery实现复制到粘贴板功能
Feb 11 Javascript
详解如何用babel转换es6的class语法
Apr 03 Javascript
vue中keep-alive的用法及问题描述
May 15 Javascript
React Native 混合开发多入口加载方式详解
Sep 23 Javascript
vue项目中使用bpmn为节点添加颜色的方法
Apr 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文件读取功能的应用实例
2015/05/08 PHP
PHP7.3.10编译安装教程
2019/10/08 PHP
PDO实现学生管理系统
2020/03/21 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
JQuery PHP图片在线裁剪实例
2020/07/27 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
element-ui组件中input等的change事件中传递自定义参数
2019/05/22 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
python删除不需要的python文件方法
2018/04/24 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
对python中的装包与解包实例详解
2019/08/24 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
在python中实现求输出1-3+5-7+9-......101的和
2020/04/02 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
CSS3实现莲花绽放的动画效果
2020/11/06 HTML / CSS
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
淘宝客服专员岗位职责
2014/04/11 职场文书
活动总结书怎么写
2015/05/11 职场文书
公司酒会致辞
2015/07/30 职场文书