心得:字符串快速连接方法 IE6:s+=耗时:8625array.join耗时:16FF:s+=耗时:281array.join耗时:297 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 才知道啊Array.Join的效率总是不低于直接拼接的 交换下顺序,测试结果(FF)为:array.join耗时:16s+=耗时:10000+<script>var StartTime=new Date();var EndTime;var sa=new Array();var s="";StartTime=new Date();for(var i=0;i<3000;i++){ sa[i]="a<table></table><table></table><table></table><table></table><table></table><table></table><table></table><table></table>b";}s=sa.join();EndTime=new Date();alert("array.join耗时:"+(EndTime-StartTime));for(var i=0;i<3000;i++){ s+="a<table></table><table></table><table></table><table></table><table></table><table></table><table></table><table></table>b";}EndTime=new Date();alert("s+=耗时:"+(EndTime-StartTime));</script>不解 array.push() 是终极方法...不过由于引擎的不同...Opera 使用+= 会更快...IE 推荐使用 push(); array.push() // 是啥方法 。。哪位大哥给个好点的帮助啊 郁闷 看到好多方法不知道都没帮助查。 哈哈,梅花兄,这真的是我自己想出来的,我在路上骑自行车的时候考虑C#中有stringbulder那么javascript中用什么呢,就想到了这个.能得到梅花兄的赞赏,可喜可贺,哈哈... 我见过javascript写的最好的代码见http://www.scbr.com/docs/company.shtml是白俄罗斯首都明斯克的一家做外包的公司,那些javascript例子写的太牛了,大家有时间可以看看. 我到网上查了查,push是这么用的var arr=new Array()arr[0]="xbc1";arr[1]="bcx2";arr[2]="cctv3";arr[5]="xctv4";arr.push("邢志云");//向最后追加arr.push("0123");for(i=0;i<arr.length;i++){ document.writeln(arr[i]);} 这个问题的原理:先看一下例子: String s = "Hello"; s = s + " world!"; 在这段代码中,s原先指向一个String 对象,内容是"Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。 通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。 对于有大量的字符串相加的操作,内存的浪费相当可观,所以会导致速度越来越慢。 这时,可考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转换十分容易。 而对于数组的PUSH来说,很类似于StringBuffer类,占用内存小,所以速度快! 以上是愚见,来自于我看的一篇技术文章,不正确的地方请各位高手指出! http://blog.csdn.net/BlueDestiny/archive/2006/08/09/1039694.aspx 好帖子,敬佩楼主,效率是程序员追求完美和完善和后期检测程序时的条件。我来补充一下我的体现哈:用innerHTML+=x时,如果数据超大,浏览器就会慢得假死现象,用insertAdjacentHTML(beforeEnd,x)方法就完全正常。用变量去执行+=,最后再用innerHTML来输出变量,也比上面的innerHTML+=快NNN倍。而最快的还是大家研究的用数组的形式,最后用.join来得快,然后数组中用push来添加更能完美提高速度。 如何判断table中td的内容换行了? 点击dt里面的文字,实现控制dl的显示和位置 js 刷新 iframe 用JS获取未选择的问题,然后改变颜色,求高手指点 再问select无法被层覆盖问题? 问一个关于用户登录的问题 怎么用js判断xml的一个节点是否有子节点?在线等! 在线紧急求助:htc文件无法引用是咋回事? 请问我怎么取得table中每个cell的值? 简单的动态显示的问题,用帧 求解一个正则的写法,搞定马上结贴 不明白lastIndexOf(String str,int fromIndex)
array.join耗时:16
s+=耗时:10000+<script>
var StartTime=new Date();
var EndTime;
var sa=new Array();
var s="";StartTime=new Date();
for(var i=0;i<3000;i++)
{
sa[i]="a<table></table><table></table><table></table><table></table><table></table><table></table><table></table><table></table>b";
}
s=sa.join();
EndTime=new Date();
alert("array.join耗时:"+(EndTime-StartTime));
for(var i=0;i<3000;i++)
{
s+="a<table></table><table></table><table></table><table></table><table></table><table></table><table></table><table></table>b";
}
EndTime=new Date();
alert("s+=耗时:"+(EndTime-StartTime));
</script>不解
Opera 使用+= 会更快...
IE 推荐使用 push();
http://www.scbr.com/docs/company.shtml
是白俄罗斯首都明斯克的一家做外包的公司,那些javascript例子写的太牛了,大家有时间可以看看.
var arr=new Array()
arr[0]="xbc1";
arr[1]="bcx2";
arr[2]="cctv3";
arr[5]="xctv4";
arr.push("邢志云");//向最后追加
arr.push("0123");
for(i=0;i<arr.length;i++)
{
document.writeln(arr[i]);
}
s = s + " world!"; 在这段代码中,s原先指向一个String 对象,内容是"Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。 通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。 对于有大量的字符串相加的操作,内存的浪费相当可观,所以会导致速度越来越慢。 这时,可考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转换十分容易。 而对于数组的PUSH来说,很类似于StringBuffer类,占用内存小,所以速度快! 以上是愚见,来自于我看的一篇技术文章,不正确的地方请各位高手指出!