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 相关文章推荐
固定背景实现的背景滚动特效示例分享
May 19 Javascript
js特效,页面下雪的小例子
Jun 17 Javascript
18个非常棒的jQuery代码片段
Nov 02 Javascript
JS验证邮件地址格式方法小结
Dec 01 Javascript
jQuery CSS3相结合实现时钟插件
Jan 08 Javascript
JS变量及其作用域
Mar 29 Javascript
详解PHP后期静态绑定分析与应用
Mar 21 Javascript
Bootstrap Paginator+PageHelper实现分页效果
Dec 29 Javascript
Vue路由 重定向和别名的区别说明
Sep 09 Javascript
three.js中多线程的使用及性能测试详解
Jan 07 Javascript
用JS写一个发布订阅模式
Nov 07 Javascript
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
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实现多进程并行操作的详解(可做守护进程)
2013/06/18 PHP
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
Javascript 面向对象特性
2009/12/28 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
2013/05/10 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
浅析Python中else语句块的使用技巧
2016/06/16 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
python3 爬取图片的实例代码
2018/11/06 Python
python连接PostgreSQL过程解析
2020/02/09 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
Python自动化之UnitTest框架实战记录
2020/09/08 Python
用python读取xlsx文件
2020/12/17 Python
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
自荐信包含哪些内容
2013/10/30 职场文书
《夹竹桃》教学反思
2014/04/20 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
文艺委员竞选稿
2015/11/19 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书
Vue实现动态查询规则生成组件
2021/05/27 Vue.js
MySQL中in和exists区别详解
2021/06/03 MySQL
Python Django ORM连表正反操作技巧
2021/06/13 Python
MySQL系列之十二 备份与恢复
2021/07/02 MySQL
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL