减少访问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照片伸缩效果不影响其他元素的布局
May 09 Javascript
谈一谈javascript闭包
Jan 28 Javascript
js获取所有checkbox的值的简单实例
May 30 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
Jun 08 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
Jul 25 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
Nov 16 Javascript
JavaScript中object和Object的区别(详解)
Feb 27 Javascript
antd组件Upload实现自己上传的实现示例
Dec 18 Javascript
Angular7创建项目、组件、服务以及服务的使用
Feb 19 Javascript
详解easyui 切换主题皮肤
Apr 04 Javascript
Postman参数化实现过程及原理解析
Aug 13 Javascript
react antd实现动态增减表单
Jun 03 Javascript
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
个人写的PHP验证码生成类分享
2014/08/21 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
鼠标图片振动代码
2006/07/06 Javascript
jscript之Open an Excel Spreadsheet
2007/06/13 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
jQuery查看选中对象HTML代码的方法
2016/06/17 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
vuejs指令详解
2017/02/07 Javascript
提高Web性能的前端优化技巧总结
2017/02/27 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
使用python 获取进程pid号的方法
2014/03/10 Python
Python判断变量是否已经定义的方法
2014/08/18 Python
Python下载懒人图库JavaScript特效
2015/05/28 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
Python制作简易版小工具之计算天数的实现思路
2020/02/13 Python
为什么python比较流行
2020/06/19 Python
班级德育工作实施方案
2014/02/21 职场文书
安全演讲稿大全
2014/05/09 职场文书
2014年业务工作总结
2014/11/17 职场文书
律师催款函范文
2015/06/24 职场文书
教师研修随笔感言
2015/11/18 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
详解Redis主从复制实践
2021/05/19 Redis
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers
Redis主从复制操作和配置详情
2022/09/23 Redis