2012-12-13 31 views
47

BenHızlı yolu

var a = "hello"; 
a += " world"; 

Nispeten çok yavaş böyle bir şey yaptığını anlıyoruz. Yeni kütüphaneler kurmadan bunu yapmanın daha hızlı bir yolu var mı?

+4

Bu doğru olsa bile (bu dizelerin birleştirilmesi çok yavaştır), kodunuz o kadar ağır bir şekilde bağlıdır ki bu da önemli bir yere sahiptir? – WTK

cevap

8

Dizeleri birleştirmek için JavaScript'te başka hiçbir yol yoktur.
Sen teorik .concat() kullanabilirsiniz, ama bu sadece +

Kütüphaneleri daha way slower özellikle de dize birleştirme veya sayısal operasyonları gibi temel operasyonlar, daha sık yerli JavaScript den değil daha yavaş bulunmaktadır.

Basitçe söylemek gerekirse: + en hızlıdır.

14

soru zaten cevaplanır, ben ilk ben NodeJS Tampon düşünce gördüm ancak ne zaman. Fakat bu, + 'dan daha yavaştır, bu yüzden muhtemelen hiçbir şeyin dizgecik kipinde +' dan daha hızlı olamayacağı muhtemeldir.

aşağıdaki kodla test edilmiştir:

function a(){ 
    var s = "hello"; 
    var p = "world"; 
    s = s + p; 
    return s; 
} 

function b(){ 
    var s = new Buffer("hello"); 
    var p = new Buffer("world"); 
    s = Buffer.concat([s,p]); 
    return s; 
} 

var times = 100000; 

var t1 = new Date(); 
for(var i = 0; i < times; i++){ 
    a(); 
} 

var t2 = new Date(); 
console.log("Normal took: " + (t2-t1) + " ms."); 
for (var i = 0; i < times; i++){ 
    b(); 
} 

var t3 = new Date(); 

console.log("Buffer took: " + (t3-t2) + " ms."); 

Çıktı:

Normal took: 4 ms. 
Buffer took: 458 ms. 
+1

Bu arabellekle, bir dizeyi içeren bir sarıcıyı başlatıyorsunuz, daha sonra 2 sarmalayıcıdan bir dizi oluşturuyorsunuz, bu da dizi boyunca bitiştirme işlevi döngüsüne sahip oluyor. 'dizeleri birleştirmek için) ve döndürün. Sanırım bu arabelleğin neden yavaş olduğunu açıklıyor. – Cerbrus

1

Sen performansı hakkında sorular. 'Concat', '+' ve 'join' ile karşılaştırarak bu perf test'a bakın - kısaca + operatörü kazanır.