减少访问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的一些总结
Nov 03 Javascript
用JQUERY增删元素的代码
Feb 14 Javascript
今天是星期几的4种JS代码写法
Sep 17 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
Nov 13 Javascript
JavaScript中的console.dir()函数介绍
Dec 29 Javascript
smartcrop.js智能图片裁剪库
Oct 14 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
Dec 24 Javascript
基于jquery实现五星好评
Nov 18 jQuery
vue实现微信分享朋友圈,发送朋友的示例讲解
Feb 10 Javascript
基于Vue+element-ui 的Table二次封装的实现
Jul 20 Javascript
Vue+Openlayers自定义轨迹动画
Sep 24 Javascript
vue+vant 上传图片需要注意的地方
Jan 03 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
Memcached常用命令以及使用说明详解
2013/06/27 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
php实现比较两个文件夹异同的方法
2015/06/18 PHP
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
JQuery CSS样式控制 学习笔记
2009/07/23 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
jQuery插件zTree实现删除树子节点的方法示例
2017/03/08 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
Nuxt.js 数据双向绑定的实现
2019/02/17 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
简单介绍Python中的JSON模块
2015/04/08 Python
Python 异常处理的实例详解
2017/09/11 Python
python监控键盘输入实例代码
2018/02/09 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
transform python环境快速配置方法
2018/09/27 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
python numpy之np.random的随机数函数使用介绍
2019/10/06 Python
详解Python3中的 input() 函数
2020/03/18 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
讲座新闻稿
2015/07/18 职场文书
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS