当前位置: 首页 > 图文教程 > 网络编程 > Javascript > Javascript createElement和innerHTML增加页面元素的性能对比

Javascript
JavaScript XML实现两级级联下拉列表
javascript显示选择目录对话框的代码
javascript HTML操作代码
用js删除tbody的代码
javascript firefox不显示本地预览图片问题的解决方法
js Array的用法总结
js fromCharCode输出26个字母的代码
js option删除代码集合
JavaScript面向对象之体会[总结]
javascript 命名空间以提高代码重用性
javascript vvorld 在线加密破解方法
javascript 限制输入和粘贴(IE和火狐3.x下测试通过)
火狐浏览器(firefox)下获得Event对象以及keyCode
刷新页面实现方式总结(HTML,ASP,JS)
Ajax,UTF-8还是GB2312 eval 还是execScript
javascript 出生日期和身份证判断大全
JS清空上传控件input(type="file")的值的代码
javascript 限制输入和粘贴(IE,firefox测试通过)
js实现简单模态窗口,背景灰显
option挡住div解决方法

Javascript createElement和innerHTML增加页面元素的性能对比


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-10   浏览: 410 ::
收藏到网摘: n/a

Javascript之createElement和innerHTML增加页面元素的性能对比 最近遇到js的效率问题,是关于在页面中新增元素的问题。
假设我们有页面如下:
复制代码 代码如下:

<HTML>
<HEAD>
</HEAD>
<BODY>
<div id="div1"></div>
</BODY>
<script>
// 脚本位置
</script>
</HTML>

现在,我们要往div1中添加对象,大家都知道在为web页面增加一个元素时可以使用如下代码:
//方法1
div1.innerHTML = '<a href="">测试</a>';
或者:
//方法2
var a = document.createElement('a');
a.innertText = '测试';
div1.appendChild(a);
在网上搜索到一个探讨js效率问题的文章,其大概意思是说方法2的效率高,其对比代码如下:
复制代码 代码如下:

// 方法1
function init(){
var staDate = new Date();
var doc = window.document;
for(var i=0;i<100;i++){
var str="<div id='div_'"+i+"' style='width:100px; height:20px;background-color:#eee'>test</div>";
container.innerHTML += str;
}
alert(new Date - staDate);
}
//方法2
function init(){
var staDate = new Date();
var doc = window.document;
for(var i=0;i<100;i++){
var oDiv = doc.createElement("div");
var oText = doc.createTextNode("text");
oDiv.appendChild(oText);
container.appendChild(oDiv);
oDiv.style.id = "div_"+i;
oDiv.style.width = "100px";
oDiv.style.height = "20px";
oDiv.style.backgroundColor = "#eee";
}
alert(new Date - staDate);
}

其页面中有:
<div id="container"></div>
<input type="button" value="start" onclick="init();" />
从执行效果来看方案2要比方案1快10倍左右,到底这是不是真的呢?其实上面的测试代码是有待商榷的,且看其方法1中的循环代码:
复制代码 代码如下:

for(var i=0;i<100;i++){
var str="<div id='div_'"+i+"' style='width:100px; height:20px;background-color:#eee'>test</div>";
container.innerHTML += str;
}

其中有很多字符串操作,而且除了使用+号来连接字符串外,还使用了+=操作符,这就是问题的所在了,在javascript中这种操作字符串的做法是严重影响效率的,所以使用上面的方法来测试createEmenent和innerHTML的效率对innerHTML是不公平的, 据此看来很可能是字符串操作吃掉了innerHTML的性能,于是写了下面的测试代码:
点击运行可以看到效果:
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

经测试发现:
1、在创建的对象较少(0-大约10左右)时,innerHTML和createElement效率差不多,测试值悠忽不定;
2、在创建对象多于20时,innerHTML要比createElement效率高很多,平均测试差不多createElement耗时是innerHTML的两倍。
总结:其实效率也在于编写的代码,在知道可用的API的效率后,怎么编写代码也是非常重要的,否则应由的执行效率不能体现出来,就如上面从网上搜到的那些代码,得出一个与事实相悖的结论。