注册 登录
编程论坛 JavaScript论坛

针对字符串连接方式,做的测试

冰镇柠檬汁儿 发布于 2010-12-09 20:40, 1338 次点击
针对于帖子 https://bbs.bccn.net/thread-327578-1-1.html 中33层hugeannex说的,我写了一个测试脚本,代码文件如下:
只有本站会员才能查看附件,请 登录

我做了测试,在IE7/8/9中的确对“+”这样的方式做了优化,甚至很多其他的浏览器(如火狐等)也对“+”有优化,但是和push的方式和用数组角标的方式相比,两者的差距并不明显,并且IE7对“+”优化很有限,其差距也是相当大。至于IE6就更不用说了,运行10W次的时候已经慢到让人无法忍受了,100W次的时候更是崩掉了。
所以得到结论,由于需要兼容IE6浏览器,所以使用push的方式不但没有过时,反而“+”的方式是不好的。
在10000次循环内,所有浏览器的性能几乎相当,没有太大差异。所以在小量使用的时候,任何方式都没有好坏之分。
14 回复
#2
BlueGuy2010-12-09 20:42
再怎么优化还是 + 啊,
#3
foktime2010-12-10 08:51
比我之前做的测试更详细
高版本的ie +有所优化,不过还是v4的方式最快
FF Opera  Safari chrome +最快

不错的东东  感谢测试代码的提供
#4
qingshuiliu2010-12-10 09:10
学习之中
#5
冰镇柠檬汁儿2010-12-11 09:13
以下是引用foktime在2010-12-10 08:51:32的发言:

比我之前做的测试更详细
高版本的ie +有所优化,不过还是v4的方式最快
FF Opera  Safari chrome +最快
从这个方面能看出一个现象,传说中Opera是最快的浏览器,它也确实在5百万次循环“+”的时候表现神速,我这里仅用了123毫秒,但是我测试了一下IE9,更神速,用了94毫秒
注:做测试用的是win7下的两款浏览器
#6
hugeannex2010-12-11 13:26
以下是引用BlueGuy在2010-12-9 20:42:37的发言:

再怎么优化还是 + 啊,

   楼主是个有心和执著的人,很不错。
  
   可这位仁兄的话太差了,你看过java或C#的StringBuilder()吗?它和它们本身的+号是同一“档次”的吗?
 按它们的原理,javascript也可以做到类似的,只是javascript不用StringBuilder()做为对象名,用“+”又怎么啦?(看上去丑点?)
还有,脚本自身受限的原因,运行起来肯定没有java和C#快的啦。

    纷纷绕绕,千百年以后,一切又重头。
#7
hugeannex2010-12-11 13:29
还有,各人的要求不同,楼主是死活抱着IE6了,而我是用IE6的就让他慢去。
所以,我向未来看齐,楼主向过去看齐。。。无话可说了
#8
hugeannex2010-12-11 20:47
吃完饭收拾完毕,看了下LZ的js代码,这测试程序写得不怎么合理,都"挤"在一起计算时间了....
若是v1由于v2的加入"计算"而“卡”了一下,v3加入的时候v1、v2。。。,v4。。。。
#9
冰镇柠檬汁儿2010-12-11 21:04
以下是引用hugeannex在2010-12-11 13:29:24的发言:

还有,各人的要求不同,楼主是死活抱着IE6了,而我是用IE6的就让他慢去。
所以,我向未来看齐,楼主向过去看齐。。。无话可说了
我倒是不想死抱着IE6,可谁让那么多的人还是在用IE6啊,我经常抱怨微软为什么还不淘汰IE6,他就不能发发狠,谁用IE6就不能上网,或者谁上网就强行升级成IE8该多好啊,我还省的费这么大劲了呢,一想起来这么多人用IE6我就想骂街,NND,有那么多好浏览器,为什么那帮人就非抱着IE6用啊,麻烦死我了。
#10
冰镇柠檬汁儿2010-12-11 21:05
话说,IE6有很多javascript的新功能都不能用,包括一些HTML标签中的新属性都不支持,写代码费死牛劲了,等会儿我骂完街再回来继续说
#11
冰镇柠檬汁儿2010-12-11 21:09
以下是引用hugeannex在2010-12-11 20:47:25的发言:

吃完饭收拾完毕,看了下LZ的js代码,这测试程序写得不怎么合理,都"挤"在一起计算时间了....
若是v1由于v2的加入"计算"而“卡”了一下,v3加入的时候v1、v2。。。,v4。。。。
这个我到没注意,我是顺序执行的代码,每个方法里都有自己的计时器,理论上是不应该有影响的

我这边的测试结果所有的浏览器,这4中模式时间差都不大,(IE6那个垃圾除外,IE7那个失败的过度浏览器也排除在外)
#12
hugeannex2010-12-12 14:25
以下是引用冰镇柠檬汁儿在2010-12-11 21:09:13的发言:

这个我到没注意,我是顺序执行的代码,每个方法里都有自己的计时器,理论上是不应该有影响的

我这边的测试结果所有的浏览器,这4中模式时间差都不大,(IE6那个垃圾除外,IE7那个失败的过度浏览器也排除在外)
我知道你的顺序执行,可这种setTimeout()的逻辑会相互有所牵扯,数值就不够“精准”了。
#13
hugeannex2010-12-12 14:28
以下是引用冰镇柠檬汁儿在2010-12-11 21:04:01的发言:

我倒是不想死抱着IE6,可谁让那么多的人还是在用IE6啊,我经常抱怨微软为什么还不淘汰IE6,他就不能发发狠,谁用IE6就不能上网,或者谁上网就强行升级成IE8该多好啊,我还省的费这么大劲了呢,一想起来这么多人用IE6我就想骂街,NND,有那么多好浏览器,为什么那帮人就非抱着IE6用啊,麻烦死我了。
这丫头有点好笑,你都抱住了,人家能不抱吗?从我做起啊。谁都恨IE6(好像对IE都有点恨吧),但我只写IE6能显示的,功能就不顾及它了。
#14
gupiao1752010-12-14 21:41
        冰镇柠檬汁儿借你的帖子,问你个C#软件的问题,在VS2010里用C#写程序能否把要调用的外界的exe文件和资源进行封装,运行时看不到任何调用窗口,而且调用的exe文件和资源也无需跟制作出来的EXE打包在一起,即把外界的exe文件隐含到一个进程通道里执行,让外界的exe文件和相关资源封装成一个整体的EXE,不知道我这样说能否理解,在VS里如何操作,还请赐教,谢了!如果可以,我将另外开帖高分提问!
#15
冰镇柠檬汁儿2010-12-15 20:13
理论上应该是可以的,不过抱歉,我不是做winform程序的,所以对其了解并不深入。你去C#版问问吧。
1