抛砖引玉,我先来一个16毫秒var now=new Date();
document.write(new Array(10000).join("10000条数据,"));
alert(new Date()-now);
360毫秒now=new Date();
for(i=1;i<=10000;i++){
document.write("10000条数据,");
}
alert(new Date()-now);
同样的结果,上面的代码比下面的效率快到20多倍。大家有高效率的代码,拿出来晒晒吧
调试欢乐多
var now=new Date();
document.write(new Array(10001).join("10000条数据,"));
alert(new Date()-now);
这样才是10000条喔
var frag = document.createDocumentFragment();
for (var i = 0; i < 1000; i++) {
var el = document.createElement('p');
el.innerHTML = i;
frag.appendChild(el);
}
document.body.appendChild(frag);
alert(new Date()-now);
15毫秒
var now=new Date();
var html = [];
for (var i = 0; i < 1000; i++) {
html.push(' ' + i + ' ');
}
document.body.innerHTML = html.join('');
alert(new Date()-now);
PS:使用一次 innerHTML 赋值代替构建 dom 元素 说明:根据数据构建列表样式的时候,使用设置列表容器 innerHTML 的方式,比构建 dom 元素并 append 到页面中的方式,效率有数量级上的提高
var h1 = element1.clientHeight + num1;
var h2 = element1.clientHeight + num2;正确高效写法:
var eleHeight = element1.clientHeight;
var h1 = eleHeight + num1;
var h2 = eleHeight + num2;
var html = '';
html += '...';
html += '...';
html += '...';
html += '...';
html += '...';
html += '...';
...
alert(html);比var html = [
'...',
'...',
'...',
..
..
];
alert(html.join(""));要慢。
还是讨论一下如何改善javascript的内存使用吧。
http://topic.csdn.net/u/20090713/11/2a5ba650-f209-4c8e-8df4-b7afd4fb43cb.html
now=new Date();
for(i=1;i<=10000;i++){
document.write("10000条数据,");
}
alert(new Date()-now);
-----------------------------------
now=new Date();
var str='';
for(i=1;i<=10000;i++){)
str+='10000条数据';
document.write(str);
alert(new Date()-now);这样才公平,要不然会执行10000次write,当然慢了
每次往字符串后面append一个串的时候,都会导致一次内存分配、一次字符串拷贝,并且产生一个垃圾。是非常低效的做法。
之前在网上没搜到好的做法,这次自己发一个。
方法1:这是最简单最容易想到的方法,往一个字符串后面不断append空格:function Space(n)
{
var str1=""
var s1;
for(s1=0;s1<n;s1++)
{
str1+=' ';
}
return str1;
}
方法2:利用JS数组的join方法:function Space(n)
{
var a1=new Array(n+1);
return a1.join(" ");
}
方法3:用二分法,递归构建字符串。function Space3(n)
{
if(n>3)
{
var str1=Space3(Math.floor(n/2));
str1+=str1;
if(n%2!=0){ return str1+" ";}
else { return str1;}
}else if(n==3)
{
return " ";
}else if(n==2)
{
return " ";
}
return " ";
}
测试结果:n的值: 100000 500000
方法1耗时: 2781毫秒 242000毫秒
方法2耗时: 15毫秒 141毫秒
方法3耗时: 0毫秒 16毫秒
VBS的Space函数:0毫秒 0毫秒 (VBS这组没有可比性,仅供参考)