2008-09-30 32 views
7

我必須在JavaScript中連接一串字符串,並且正在尋找最快的方法。我們假設Javascript必須創建一個大的XML-「文件」,當然,這個文件由很多小字符串組成。所以我想出了:比這個例子更快的Javascript字符串連接?

var sbuffer = []; 
    for (var idx=0; idx<10000; idx=idx+1) { 
     sbuffer.push(‘<xmltag>Data comes here... bla... </xmltag>’); 
    } 
    // Now we "send" it to the browser... 
    alert(sbuffer.join(」)); 

不要關注構建該示例的循環或其他「複雜」代碼。

我的問題是:對於未知數量的字符串,你有更快的算法/方法/想法來連接許多小字符串到一個巨大的字符串?

回答

13

更改行:

sbuffer.push(‘Data comes here... bla... ’);

sbuffer[sbuffer.length] = ‘Data comes here... bla... ’;

會給你5%-50%的速度增益(取決於瀏覽器,在IE瀏覽器 - 增益爲最高)

問候。

1

我覺得你已經非常接近最佳狀態了。 YMMV,在主機進程的JavaScript引擎(例如瀏覽器)中獲得或丟失了很大的速度。

+0

是的,實際上,JavaScript「性能」在許多客戶端機器上運行有很大的優勢,而不僅僅在一臺服務器上運行 - 分割和阻止;-)。 但隨着客戶端腳本變得越來越複雜,性能也成了問題。問題:YMMV是什麼意思? – Georgi 2008-09-30 14:53:43

+0

您的里程可能不同 – 2008-09-30 14:56:46

+0

@Georgi:您的里程可能不同 – 2008-09-30 14:57:08

1

我認爲將字符串壓入數組然後加入數組是JavaScript中字符串串聯的最快技術。在此discussion about W3C DOM vs. innerHTML中有一些支持證據。請注意innerHTML 1和innerHTML 2結果之間的差異。

1

據我所知,你的算法是好的,並且被稱爲字符串連接問題的高性能解決方案。

0

當心IE壞的垃圾回收器!使用後你想用你的陣列做什麼?可能它會得到GC'd?

您可以通過與連接進行連接獲得性能,然後在GC -ing之後丟失。另一方面,如果你始終將一個數組放在範圍內,而不是重用它,這可能是一個很好的解決方案。

就我個人而言,我想要最簡單的解決方案:只需使用+ =運算符。

0

通過buffering可以獲得更多的速度。