2016-04-27 71 views
-2

哪個更快?在JavaScript中連接字符串或數組的速度更快嗎?

var str = ''; 
for(var i=0; i<1000; i++) { 
    str += i; 
} 

var arr = []; 
for(var i=0; i<1000; i++) { 
    arr.push(i); 
} 
var str = arr.join(''); 

我問,因爲我寫了一個CSS解析器的作品真的很好,但對於更大的樣式表(可以理解)很慢。我試圖找到加快速度的方法,我想知道這是否會有所作爲。提前致謝!

+0

當你嘗試時發生了什麼?它在其他瀏覽器中表現如何?你在測試中使用了現實數據嗎? –

+1

你測試過了嗎?執行這些代碼100000次(不是'我<100000',但實際重複功能),標記時間。 – Justinas

+3

請檢查相同的問題http://stackoverflow.com/questions/7299010/why-is-string-concatenation-faster-than-array-join –

回答

0
console.time('a') 
var str = ''; 
for(var i=0; i<10000; i++) { 
    str += i; 
} 
console.timeEnd('a') 

VM474:6:1.940ms

console.time('a') 
var arr = []; 
for(var i=0; i<10000; i++) { 
    arr.push(i); 
} 
var str = arr.join(''); 
console.timeEnd('a') 

VM476:7:2.542ms

+0

性能實際上比這更差,因爲在每個for循環的字符串concat測試中,您將創建一個有效的字符串,其中s + = i;在數組推送和連接測試中,您只需推入循環並在循環結束後進行一次連接操作。如果你將推送和加入循環相結合,那麼結果將會是2,500,000 ops和6,000 op/s。 – Redu

0

這是更快做字符串連接(this thread解釋了爲什麼),其可以通過該證明簡單的測試

function f1() { 
 
    var str = ''; 
 
    for (var i = 0; i < 1000; i++) { 
 
    str += i; 
 
    } 
 
} 
 

 
function f2() { 
 
    var arr = []; 
 
    for (var i = 0; i < 1000; i++) { 
 
    arr.push(i); 
 
    } 
 
    var str = arr.join(''); 
 
} 
 

 

 
var startTime = new Date(); 
 
for (var counter = 0; counter < 10000; counter++) { 
 
    f1() 
 
} 
 
var endTime = new Date(); 
 
alert("String-concate Time Diff = " + (endTime - startTime)); 
 

 

 
var startTime = new Date(); 
 
for (var counter = 0; counter < 10000; counter++) { 
 
    f2() 
 
} 
 
var endTime = new Date(); 
 
alert("Array join Time Diff = " + (endTime - startTime));

正如你所看到的,string-concatenation佔用了Array-join佔用的1/3的時間。

0

我做了一些基準測試如下。看起來字符串的長度在這裏尤爲重要,尤其是對於Array.prototype.join()操作。除非基本不應該用於字符串連接。

使用concat:

var t = 0, 
 
    p = 0, 
 
    s = "", 
 
    i = 0; 
 
while (t<=1000) { 
 
\t p = performance.now(); 
 
\t s +=i; 
 
\t t += performance.now()-p; 
 
\t i++; 
 
} 
 
document.write("<pre> Done " + i + " string concat op/s</pre>");

的Array.push()+ Array.join()

var t = 0, 
 
p = 0, 
 
a = [], 
 
s = "", 
 
i = 0; 
 
while (t<=1000) { 
 
p = performance.now(); 
 
a.push(i) 
 
s = a.join("") 
 
t += performance.now()-p; 
 
i++; 
 
} 
 
document.write("<pre> Done " + i + " Array.push() + Array.join() op/s</pre>");

相關問題