var myName = 'Bob';
myName += ' is a good name';
對於這個長期操作,有沒有更好的辦法做到這一點?也許有一個StringBuffer類型的結構?
謝謝! :)
var myName = 'Bob';
myName += ' is a good name';
對於這個長期操作,有沒有更好的辦法做到這一點?也許有一個StringBuffer類型的結構?
謝謝! :)
的「好」的辦法是:
var nameparts= ['Bob'];
nameparts.push(' is a good name');
...
nameparts.join('');
然而,最現代化的JavaScript實現現在做檢測天真級聯,可以在許多情況下,優化它了,因爲這麼多人(唉)寫這樣編碼。所以在實踐中,'好'的方法今天不會像以前那麼快。
只需使用中間字符串即可獲得巨大的性能提升!可以在JavaScript中創建類似StringBuffer的類來獲得更多的性能提升。
查看完整的文章和圖形here。
我曾經讀過關於這個問題的一些代碼來構建發貨與數組緩衝弦的文章:
http://www.softwaresecretweapons.com/jspwiki/javascriptstringconcatenation
我測試了它自己,它是在IE瀏覽器的方式更快...和方法要慢火狐!
總結:那裏有很多JavaScript引擎,我們不能真正依賴這種實現細節。如果這是一個問題,你會注意到。在此之前,不要太在意。
字符串連接的效率將取決於您正在使用的瀏覽器。你可以谷歌的統計數據,也有YouTubeTalk可用在youtube上。根據我的記憶,當元素數量低於幾千時,大多數瀏覽器都會有效地處理字符串連接。之後,IE以指數速度減速,當Firefox,Chrome和Safari瀏覽器做得更好。這可能會改變,因爲現在IE9並不那麼遙遠。
對 - 我認爲用狹隘的優化技巧弄糟可愛的代碼是一種遺憾。現在,那就是說,在某些情況下,IE6真的非常慢,以至於這個特別的技巧真的很好理解。對於兩個或三個連接而言,這很愚蠢,但對於數量低至數百個的數字,它可能會產生令人驚訝的差異。 – Pointy 2010-09-23 18:10:17
你有沒有優化它的實現列表? – bobber205 2010-09-23 18:12:41
我正在修改一些較老的JS代碼,並且根據Firebug花費了40%的執行時間的函數大多隻是字符串連接。 – bobber205 2010-09-23 18:13:16