JavaScript中字符串连接性能
看到很多书或文章中都有说在JavaScript中进行字符串连接时最好使用Array的join而不是字符串的“+”操作。因为,join的性能更好,速度更快,可我使用以下代码测试时却得到相反的结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /* cost time when using '+' */ document.write("<h4>using '+'</h4>"); var avg = 0; for (var t=0; t < 10; t++){ var d1 = new Date(); var str = ""; for (var i=0; i < 100000; i++) { str += "text"; } var d2 = new Date(); avg += d2.getTime() - d1.getTime(); document.write(d2.getTime() - d1.getTime() + " "); } document.write("<br />AVG: " + avg/10); /* cost time when using 'array join' */ document.write("<h4>using 'array join'</h4>"); var avg = 0; for (var t=0; t < 10; t++){ var arr = new Array; d1 = new Date(); for (var i=0; i < 100000; i++){ arr.push("text"); } var res = arr.join(""); d2 = new Date(); avg += d2.getTime() - d1.getTime(); document.write(d2.getTime() - d1.getTime() + " "); } document.write("<br />AVG: " + avg/10); |
无论在IE 8还是Firefox、chrome等浏览器中都是后者耗时长。
后来查询了一下发现,+=比Array的join耗时长的说法是针对IE 6/7而言的,因为其垃圾收集机制不一样,每次重新分配内存后都要进行垃圾收集。这一问题在IE 8中得以解决。(小小说一下,IE 系类的JS引擎果然比别的落后很多,耗时都比别人的高一个数量级,不知道IE 9如何。)
占沙发
@BoKeam, 颓废了好几天,今天来写点东西
这个干嘛用的
@BoKeam, 这里纯粹是比较一下两种方法的性能而已
奇怪我的留言啊
流年用缓存了?
@BoKeam, 有人说过需要强行刷新才可以看到回复,不过我这里倒没问题。(嗯,用了object-cache)
@流年, 怪不得我看了两次都没..
说实话,没看懂。
@如水, 嗯,不搞这东西的可以不动
呃,我从来都是用加号的……JS根本没正经学过,也没看过什么书,现用现查
@Ray Chow, 我也没认真学过
你现在在我的文章页还loading么 我自己的chrome是没事了
但ie要没完没了的loading 气死我了
@snowxh, 上次忘记说了,那个问题应该是我的问题(chrome升级不完全
);果然IE下没完没了
@流年, 升级不完全- – 升到一半停了么- -。
话说的的留言缓存问题变严重了…
之前是邮件过来看不到你的回复强刷一下 现在变成连自己的留言也看不到了……
@snowxh, 呃!为啥我这里看就没问题的呢
@流年, 更神奇的是我的ie下没事 都是别人的ie loading!
@snowxh, 我XP + IE 8访问不了
来吧一起干掉IE
@Mucid, 我就不做那么绝了,提示一下就可以了
继续看不懂,继续路过
@奶牛,
国内有些教程是针对ie老版本的,很囧~
@zwwooooo, 嗯,有些书更新的时候都没有去验证一下
well,又和ie扯上关系了
@Ygs, 没办法,毕竟IE的升级换代比别的慢很多,所以,对于新技术的应用、新标准的应用就慢别人很多了
还没用javascript写过东西。
现在除了网银和看迅雷看看,几乎就不用IE了
@vastar, 嗯,我也基本不用IE
IE9的JS性能会很大的提升的,但是还是比不上FF和Chrome,但是至少是一个数量级的差距了~而不是几个数量级!
正在学习JS中~~
@Pavel, 同学习中
你终于肯更新了
@蛋卷, 呵呵,不过今天又没动力了