减少访问DOM的次数提升javascript性能


Posted in Javascript onFebruary 24, 2014

访问DOM元素是有代价的,修改DOM元素则更为昂贵,因为它会导致浏览器重新计算页面的几何变化。

当然,最坏的情况是在循环中访问修改元素,尤其是对HTML元素集合循环操作。

例如:

<!-- 优化前 --> 
<script type="text/javascript"> 
function innerHTMLLoop () { 
for(var count = 0; count < 15000; count++){ 
document.getElementById('here').innerHTML+='a'; 
} 
} 
</script>

这个函数循环修改页面元素的内容。这段代码的问题在于,每次循环迭代,该元素都被访问两次:一次读取innerHTML属性,另外一次重写它。

一个效率更高的做法是使用局部变量存储更新后的内容,然后在循环结束后一次性写入:

<!-- 优化后 --> 
<script type="text/javascript"> 
function innerHTMLLoop () { 
var content = ''; 
for(var count = 0; count < 15000; count++){ 
content+='a'; 
} 
document.getElementById('here').innerHTML+=content; 
} 
</script>

访问DOM的次数越多,代码运行速度越慢。因此,在有其他方案可以代替的时候,我们要尽量减少访问DOM的次数。
Javascript 相关文章推荐
jquery UI 1.72 之datepicker
Dec 29 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
Feb 27 Javascript
判断ie的两种简单方法
Aug 12 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
May 17 Javascript
js选项卡的制作方法
Jan 23 Javascript
浅谈关于angularJs中使用$.ajax的注意点
Aug 12 Javascript
微信小程序template模版的使用方法
Apr 13 Javascript
axios+Vue实现上传文件显示进度功能
Apr 14 Javascript
vue封装swiper代码实例解析
Oct 08 Javascript
使用webpack搭建pixi.js开发环境
Feb 12 Javascript
谈一谈vue请求数据放在created好还是mounted里好
Jul 27 Javascript
vue动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
createTextRange()的使用示例含文本框选中部分文字内容
Feb 24 #Javascript
JavaScript 实现鼠标拖动元素实例代码
Feb 24 #Javascript
对table和ul实现js分页示例分享
Feb 24 #Javascript
jquery.post用法之type设置问题
Feb 24 #Javascript
jQuery获得IE版本不准确webbrowser的解决方法
Feb 23 #Javascript
js获得页面的高度和宽度的方法
Feb 23 #Javascript
使用js判断当前时区TimeZone是否是夏令时
Feb 23 #Javascript
You might like
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
YII路径的用法总结
2014/07/09 PHP
总结对比php中的多种序列化
2016/08/28 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
jquery validate.js表单验证的基本用法入门
2010/05/13 Javascript
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
2010/05/27 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
AngularJS实现的简单拖拽功能示例
2018/01/02 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
[01:15:29]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第三局
2016/03/04 DOTA
详解Python中 __get__和__getattr__和__getattribute__的区别
2016/06/16 Python
django批量导入xml数据
2016/10/16 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
使用django自带的user做外键的方法
2020/11/30 Python
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
物业公司采购员岗位职责
2013/12/31 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
2017春节晚会开幕词
2016/03/03 职场文书
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技