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来解决ajax读取页面乱码
Nov 28 Javascript
密码框显示提示文字jquery示例
Aug 29 Javascript
深入理解JavaScript是如何实现继承的
Dec 12 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
May 13 Javascript
深入剖析javascript中的exec与match方法
May 18 Javascript
微信小程序 二维码canvas绘制实例详解
Jan 06 Javascript
vue2 自定义动态组件所遇到的问题
Jun 08 Javascript
Vue中父组件向子组件通信的方法
Jul 11 Javascript
基于JSON数据格式详解
Aug 31 Javascript
javascript变量提升和闭包理解
Mar 12 Javascript
Vue进度条progressbar组件功能
Apr 17 Javascript
vue中过滤器filter的讲解
Jan 21 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
PHPUnit安装及使用示例
2014/10/29 PHP
PHP解析RSS的方法
2015/03/05 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
2015/12/14 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
页面中iframe相互传值传参
2009/12/13 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
jQuery中库的引用方法
2018/01/06 jQuery
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
学习python (1)
2006/10/31 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
python Scrapy框架原理解析
2021/01/04 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
创造美妙香氛体验:Aera扩散器和香水
2018/11/25 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
工厂保洁员岗位职责
2013/12/04 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
给市场的环保建议书
2014/05/14 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server
spring boot实现文件上传
2022/08/14 Java/Android