减少访问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 可以拖动的DIV(二)
Jun 26 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
Nov 22 Javascript
动态加载jQuery的方法
Jun 16 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
Aug 07 Javascript
JavaScript实现打开链接页面的方式汇总
Jun 02 Javascript
Angular 4 指令快速入门教程
Jun 07 Javascript
Angular4学习教程之DOM属性绑定详解
Jan 04 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
Aug 12 Javascript
angularjs的单选框+ng-repeat的实现方法
Sep 12 Javascript
js限制输入框只能输入数字(onkeyup触发)
Sep 28 Javascript
Vue实现兄弟组件间的联动效果
Jan 21 Javascript
在vue中import()语法不能传入变量的问题及解决
Apr 01 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
无线电的诞生过程
2021/03/01 无线电
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
PHP实现带重试功能的curl连接示例
2016/07/28 PHP
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
Django+Vue实现WebSocket连接的示例代码
2019/05/28 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
Anaconda下安装mysql-python的包实例
2018/06/11 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
python中强大的format函数实例详解
2018/12/05 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
Python爬取豆瓣视频信息代码实例
2019/11/16 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
专家推荐信模板
2014/05/09 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
2014年就业工作总结
2014/11/26 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
聘任书的格式及模板
2019/10/28 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript