使用innerHTML替换子节点可能会导致浏览器的内存占用问题,尤其是在IE中,问题更加明显。在删除带有时间处理程序或引用了其他js对象子树是,就有可能导致内存占用问题。假设某个元素有一个事件处理程序,在使用前某个属性将该该元素从文档树种删除后,元素与时间处理程序之间的绑定关系在内存中并没有一并删除。如果这种情况频繁出现,页面占用的内存数量就会明显增加。因此在使用innerHTML时,最好先手工删除要被替换的元素的所有事件处理程序.

不过,使用innerHTML这个属性,仍然还是可以为我们提供很多便利的。一般来说,在插入大量新HTML标记时,使用innerHTML属性与通过多次DOM操作先创建节点再指定他们之间的关系相比,效率要高得多。这是因为在设置innerHTML时,就会创建一个html解析器。这个解析器是在浏览器级别的代码基础上运行的,因此比执行js快得多。不可避免地,创建和销毁html解析器也会带来性能损失,所以最好能够将创建innerHTML的次数控制在合理范围内。例如,下列代码使用innerHTML创建了很多列表项:

for(var i=0,len=value.length;i<len;i++){

  ul.innerHTML+=”<li>”+value[i]+”</li>”; //避免这种频繁操作

}

  

这种每次循环都设置一次innerHTML的做法效率很低。而且,每次循环还要从innerHTML中读取一次信息,及以为这每次循环要访问两次innerHTML。最好的做法是单独构建字符串,然后在一次性地将结果字符串赋值给innerHTML,想这样:

Var itemHtml=””;

for(var i=,len=value.length;i<len;i++){

  itemHtml+=”<li>”+value[i]+”</li>”; //避免这种频繁操作

}

ul.innerHTML=intemHtml;

这个例子的效率高得多,因为它只对innerHTML执行了一次渎职操作。

最新文章

  1. 萌新笔记——linux下(ubuntu)反删除(误删恢复)与回收站制作
  2. WebGIS中一种根据网格索引判断点面关系的方法
  3. Python 打包工具cx_freeze 问题记录及解决办法
  4. 【C语言训练】尼科彻斯定理
  5. 使用U盘安装win7系统
  6. BZOJ4034——[HAOI2015]T2
  7. 与你相遇好幸运,Sails.js自定义responses
  8. AngularJS学习--- AngularJS中数据双向绑定(two-way data-binding) orderBy step4
  9. getElementsByClassName
  10. 信息图形(Infographic)
  11. eclipse下安装Extjs的插件spket
  12. 在MVC中动态读取JSON数据创建表格
  13. TCP/IP 相关总结
  14. Unity3D 相机跟随主角移动
  15. 编译MangosZero
  16. 使用CocoaPods时遇到 Permission denied 问题
  17. D. Mister B and PR Shifts
  18. Bootstrap3.0学习第五轮(表格)
  19. 数据结构入门之链表(C语言实现)
  20. xargs 原理&amp;使用

热门文章

  1. HBase底下的存储机制
  2. PowerDesigner在修改表的字段Name的时Code不自动跟着变的处理方法以及导入Mysql数据库的表
  3. Luogu P1462 通往奥格瑞玛的道路(最短路+二分)
  4. Leetcode437Path Sum III路径总和3
  5. Linux命令CURL用法
  6. LC327 Count of Range Number
  7. Rabbitmq交换机三种模式介绍
  8. GIL(全局解释器锁) 理解
  9. web前端学习(四)JavaScript学习笔记部分(8)-- JavaScript 浏览器对象
  10. tomcat9 gzip