看到很多书或文章中都有说在JavaScript中进行字符串连接时最好使用Array的join而不是字符串的“+”操作。因为,join的性能更好,速度更快,可我使用以下代码测试时却得到相反的结果。
/* 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, 同学习中
你终于肯更新了
@蛋卷, 呵呵,不过今天又没动力了
的确如此 呵呵,优化的工作决不是一概而论的。