减少访问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 相关文章推荐
各种常用浏览器getBoundingClientRect的解析
May 21 Javascript
javascript中关于执行环境的杂谈
Aug 14 Javascript
Javascript的&amp;&amp;和||的另类用法
Jul 23 Javascript
Javascript核心读书有感之词法结构
Feb 01 Javascript
JavaScript中push(),join() 函数 实例详解
Sep 06 Javascript
React Native实现简单的登录功能(推荐)
Sep 19 Javascript
微信小程序-详解数据缓存
Nov 24 Javascript
浅谈vue-cli 3.0.x 初体验
Apr 11 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
May 10 Javascript
Vue.js实现的计算器功能完整示例
Jul 11 Javascript
Angular(5.2-&gt;6.1)升级小结
Dec 27 Javascript
微信小程序scroll-view的滚动条设置实现
Mar 02 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来处理多个提交任务
2006/10/09 PHP
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
Python lambda和Python def区别分析
2014/11/30 Python
python执行外部程序的常用方法小结
2015/03/21 Python
使用Python设计一个代码统计工具
2018/04/04 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
python对日志进行处理的实例代码
2018/10/06 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
python excel和yaml文件的读取封装
2021/01/12 Python
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
外语专业毕业生自我评价分享
2013/10/05 职场文书
股指期货心得体会
2014/09/10 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
教师求职信怎么写
2015/03/20 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书
2019教师的学习计划
2019/06/25 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书