减少访问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 相关文章推荐
javascript代码加载优化方法
Jan 30 Javascript
Javascript 面向对象(三)接口代码
May 23 Javascript
一个超简单的jQuery回调函数例子(分享)
Aug 08 Javascript
微信小程序 SocketIO 实例讲解
Oct 13 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
May 23 Javascript
Vue2.0生命周期的理解
Aug 20 Javascript
vue项目中极验验证的使用代码示例
Dec 03 Javascript
js中的面向对象之对象常见创建方法详解
Dec 16 Javascript
Javascript地址引用代码实例解析
Feb 25 Javascript
Node.js API详解之 util模块用法实例分析
May 09 Javascript
JavaScript enum枚举类型定义及使用方法
May 15 Javascript
解决antd Form 表单校验方法无响应的问题
Oct 27 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数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
Mootools 1.2教程 函数
2009/09/15 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
JavaScript中this的使用详解
2013/11/08 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
详解python的webrtc库实现语音端点检测
2017/05/31 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
Python常见字典内建函数用法示例
2018/05/14 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
澳大利亚最早和最古老的巨型游戏专家:Yardgames
2020/02/20 全球购物
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
中华魂演讲稿
2014/05/13 职场文书
初中家长评语和期望
2014/12/26 职场文书
董事长岗位职责
2015/02/13 职场文书
个性与发展自我评价
2015/03/06 职场文书
个人业务学习心得体会
2016/01/25 职场文书
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis
python数字图像处理实现图像的形变与缩放
2022/06/28 Python