以前在群里曾经和天牛讨论过一次innerHTML和appendChild谁更快的事情,当时也做过一次测试,结果就是,在IE 下,innerHTML比appendChild快,firefox和chrome,safari下,appendChild比innerHTML要快。
当时的代码,是这样的。
向body中插入1000个li,
var str=""; for(var i=0;i<1000;i++){ str+="<li></li>"} document.body.innerHTML=str;
appendChild
for(var i=0;i<1000;i++){ var li=document.createElement("li"); document.body.appendChild(li); }
不过已经过了2年了,现在的浏览器,也不是当年的浏览器了,字符串相加也比数组join来的快了,所以我一直有个想法,测试一下现代浏览器。
我的浏览器环境是Chrome 23,Firefox 17,IE9
我的作法,在body中创建1000个p标签
for(var i=0;i<1000;i++){ document.body.appendChild(document.createElement("p")); } var p=document.getElementsByTagName("p");
测试一
测试innerHTML的写法是
for(var i=0;i<1000;i++){ document.body.appendChild(document.createElement("p")); } var p=document.getElementsByTagName("p"); var d=new Date(); for(var k=0;k<1000;k++){ p[k].innerHTML="1"; } console.log(new Date()-d);
与之对应的appendChild作法是
for(var i=0;i<1000;i++){ document.body.appendChild(document.createElement("p")); } var p=document.getElementsByTagName("p"); var d=new Date(); for(var k=0;k<1000;k++){ p[k].appendChild(document.createTextNode("1")); } console.log(new Date()-d);
好了,开始测试!
浏览器 | Chrome | Firefox | IE |
---|---|---|---|
innerHTML | 17-20 | 59-70 | 98-116 |
appendChild | 13-15 | 50-56 | 105-109 |
从测试结果看,如果向这一千个P中插入一个字符“1”,那么,显然chrome中,appendChild要比innerHTML快很多,Firefox中也要快一些,IE则相当
测试二
测试innerHTML的写法是
for(var i=0;i<1000;i++){
document.body.appendChild(document.createElement("p"));
}
var p=document.getElementsByTagName("p");
var d=new Date();
for(var k=0;k<1000;k++){
p[k].innerHTML="13";
}
console.log(new Date()-d);
与之对应的appendChild作法是
for(var i=0;i<1000;i++){ document.body.appendChild(document.createElement("p")); } var p=document.getElementsByTagName("p"); var d=new Date(); for(var k=0;k<1000;k++){ var span=document.createElement("span"); span.appendChild(document.createTextNode("13")); p[k].appendChild(span); } console.log(new Date()-d);
好了,开始测试!
浏览器 | Chrome | Firefox | IE |
---|---|---|---|
innerHTML | 28-35 | 73-81 | 115-135 |
appendChild | 19-24 | 67-74 | 201-231 |
从测试结果看,如果向这一千个P中插入一个“span”,chrome中,appendChild依然要比innerHTML快很多,Firefox中也会快一些,IE中appendChild就比innerHTML慢多了。
近期评论