字串合併的效率問題
- 詳細內容
- 分類:Javascript
- 發佈:2013-01-28, 週一 23:59
- 點擊數:2600
在做字串合併時,很多人都喜歡用+運算子來進行運算。
但似乎有不少人認為這種作法效率不彰,不是個好的作法,使用array.join()倒是個比較推崇的方法。
其實,不盡然如此。
在進行小量字串合併時,效率從來就不是考慮的重點,怎麼寫都沒關係,運作正常才是重點。
但是在進行大量字串合併時,效率就是個問題。
身為業餘的我,其實不太愛分析效能,所以看看別人分析的結果吧,
參考了 Craig Buckler 的 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()方法的比較。:
從內容的分析看起來
使用+運算除了firefox外,其他瀏覽器的效能似乎都沒有用join來的好
不過他把建立陣列時間額外分出來了,
很多時候運用+運算子並不需要額外把字串放進陣列的動作,而join非用不可。
這還有一篇老文章,參考看看:
String Performance: an Analysis
按個讚!~支持本站!~
你可能會有興趣的文章:
- 色彩選取器
- String.concat() 合併字串
- String.link()建立文字超鏈結
- String.sup()與String.sub() 上標與下標
- String.charAt() 傳回字串中索引值位置的字元
- String.charCodeAt()傳回指定字元的unicode值