减少访问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替换table中的内容并显示进度条的代码
Aug 02 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
Dec 01 Javascript
javaScript(JS)替换节点实现思路介绍
Apr 17 Javascript
Javascript保存网页为图片借助于html2canvas库实现
Sep 05 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
Aug 04 Javascript
基于JavaScript操作DOM常用的API小结
Dec 01 Javascript
jQuery获取table表中的td标签(实例讲解)
Jul 28 jQuery
Vue学习笔记之表单输入控件绑定
Sep 05 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
Apr 19 jQuery
Vue无限滑动周选择日期的组件的示例代码
Jul 18 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
Jan 27 jQuery
vue使用v-model进行跨组件绑定的基本实现方法
Apr 28 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
smarty实现多级分类的方法
2014/12/05 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
JavaScript返回网页中超链接数量的方法
2015/04/03 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
Python深入06——python的内存管理详解
2016/12/07 Python
Python实现网站注册验证码生成类
2017/06/08 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
通过python爬虫赚钱的方法
2019/01/29 Python
python解释器spython使用及原理解析
2019/08/24 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
python speech模块的使用方法
2020/09/09 Python
10个最常见的HTML5面试题 附答案
2016/06/06 HTML / CSS
利用Node实现HTML5离线存储的方法
2020/10/16 HTML / CSS
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
医学生自荐信范文
2013/12/03 职场文书
大学校庆邀请函
2014/01/11 职场文书
加拿大留学自荐信
2014/01/28 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
女儿满月酒致辞
2015/07/29 职场文书