2011-12-24 434 views
7

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

根据该连接(印象)是快,我通过我的代码开始使用它,而不是+,然后我跑进了谷歌分析下面的代码行:

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

假设谷歌程序员是最有知识的人之一,这让我想知道。当然,这一行只会每页加载一次,并且可以说任何速度差异都可以忽略不计。但仍然?

+1

功能的速度由JavaScript确定实现,这在浏览器中有所不同。用于测试 - http://jsperf.com/ – Bakudan 2011-12-24 21:38:21

+1

这也是'[x,y] .join('')'。我相信节省的是大量的参数(因为你用'+'做了一个调用,加入只是一个函数调用。) – Hogan 2011-12-24 21:39:25

+0

+ Bakudan,找到了一个应该说明问题的测试:http:// jsperf .com/concat-vs-join2/4 – TJR 2011-12-24 21:48:23

回答

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; 

我平均低40多岁的 “+” 和低50年代的 “加盟” 使看起来连接速度较慢。这很可能是因为需要为连接创建一个数组。这在不同的浏览器中可能会有不同的解释器。

+2

也许你应该试试[jspref.com](http://jspref.com/)。 – 2012-05-28 21:25:46

6

用于连接字符串的Array .join()方法(-trick)有它的根源,那时网站在Internet Explorers上运行得非常多。对于IE6 + 7来说,它的确比.join()真的是由于在IE中的字符串操作的行为非常糟糕,所以比使用+运算符更快得多

对于其他浏览器的性能差异并不大,所以建议使用.join()(当时的情况)。现在,大多数引擎大部分时间优化了字符串操作,除非您认为您的代码在IE6 + 7中运行很多,您应该只使用+

相关问题