字串合併的效率問題

在做字串合併時,很多人都喜歡用+運算子來進行運算。

但似乎有不少人認為這種作法效率不彰,不是個好的作法,使用array.join()倒是個比較推崇的方法。

其實,不盡然如此。

在進行小量字串合併時,效率從來就不是考慮的重點,怎麼寫都沒關係,運作正常才是重點。

但是在進行大量字串合併時,效率就是個問題。

身為業餘的我,其實不太愛分析效能,所以看看別人分析的結果吧,

參考了   的 High-performance String Concatenation in JavaScript

雖然文章有點舊,不過還不錯用。

看看下面這程式,使用+運算子來進行字串合併:

var str = "";
for (var i = 30000; i > 0; i--) {
str += "String concatenation. ";
}

下面這程式使用array.join來進行字串合併:

var str = "", sArr = [];
for (var i = 30000; i > 0; i--) {
sArr[i] = "String concatenation. ";
}
str = sArr.join("");

哪一種比較快?這結果其實很複雜,跟瀏覽器有相當的關係。

Chrome 6.0: 兩種方法都小於10ms,不過用+運算快了一些

Opera 10.6:一樣 +運算快了一些 15ms : 17 ms

Firefox 3.6:差不多都在30ms,但join方法似乎快了幾ms

IE 8.0:30ms:70ms

Safari 5.0.1: 5ms:55ms

整體上來說,使用+運算子是有相對優勢的。但是,這優勢並不存在在舊型的瀏覽器中!

IE7以下的瀏覽器在第一種程式碼的情況下花了150,000ms卻依然處在無法回應的狀態,

第二種作法卻花不到200ms。

看的出來使用+運算子在早期的瀏覽器確實是個負擔,

不過新型的瀏覽器其實已經對這方面做了優化。

所以說  (1) is faster on modern engines. 

不是我說的,是Brendan Eich說的。

Brendan Eich是誰? javascript 的 創始人。.

這裡有一篇較新的分析,還包含concat()方法的比較。:

JavaScript 字串處理效能分析

從內容的分析看起來

使用+運算除了firefox外,其他瀏覽器的效能似乎都沒有用join來的好

不過他把建立陣列時間額外分出來了,

很多時候運用+運算子並不需要額外把字串放進陣列的動作,而join非用不可。

這還有一篇老文章,參考看看:

String Performance: an Analysis

 
 

  按個讚!~支持本站!~

FB推薦載入中  

你可能會有興趣的文章: