2011-12-24 119 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中運行很多,您應該只使用+

相關問題