对于字符串,[x,y,z] .join('')是否真的比x + y + z快?

时间:2011-12-24 21:34:33

标签: javascript performance concatenation

对于字符串,[x,y,z].join('')是否真的比x + y + z快?

在join()更快的印象下,我开始使用我的代码而不是+,然后我在Google Analytics代码中遇到以下行:

    ga.src = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

假设Google编码员是知识最渊博的人之一,那让我很奇怪。当然,该行仅在每页加载时运行一次,并且可以说任何速度差异都可以忽略不计。但是还是吗?

3 个答案:

答案 0 :(得分:6)

用于连接字符串的数组.join()方法(-trick)的根源是当网站在Internet Explorer上运行时很多。对于IE6 + 7而言,由于IE中字符串操作的行为非常糟糕,因此使用.join()运算符比+ 更快。

对于其他浏览器,性能差异并不大,因此使用.join()(再次,当时)是一个很好的建议。如今,大多数引擎都会大量优化字符串操作,除非您认为任何代码在IE6 + 7中运行很多,否则您应该使用+

答案 1 :(得分:2)

使用以下代码在Firefox 6.0.2中使用Firebug控制台:

b = new Date().getTime(); for (var i = 0; i < 10000; i++) {a = "sfhfdshdshsdh" + "sfhsfdhsfhdsfh" + "shsfdsdgsdgsgsdfgdfsgsfdghsdfhsdh";} c = new Date().getTime(); d = c - b;

b = new Date().getTime(); for (var i = 0; i < 10000; i++) {a = ["sfhfdshdshsdh","sfhsfdhsfhdsfh","shsfdsdgsdgsgsdfgdfsgsfdghsdfhsdh"].join();} c = new Date().getTime(); d = c - b;

我在“+”的低位40s和“join”的低位50s,所以看起来连接速度较慢。这很可能是因为需要为连接创建一个数组。在具有不同解释器的不同浏览器中,这可能会有所不同。

答案 2 :(得分:1)

以下是我在Google Chrome上运行的示例。

尝试其他一些broswers ....

对我来说,+总是更快......

http://jsperf.com/join

http://jsperf.com/join-6