2012-12-13 11 views
47

capisco che fare qualcosa di similemodo veloce per concatenare le stringhe in nodeJS/JavaScript

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

È relativamente molto lento, come il browser lo fa in O(n). C'è un modo più veloce per farlo senza installare nuove librerie?

+4

Anche se ciò fosse vero (la concatenazione di stringhe è molto lenta), il codice dipende da esso in modo così pesante che è importante? – WTK

risposta

8

Non c'è davvero nessun altro modo in JavaScript per concatenare le stringhe.
si potrebbe teoricamente utilizzare .concat(), ma questo è way slower che soli +

biblioteche sono il più delle volte più lento di nativo JavaScript, in particolare sulle operazioni di base come la concatenazione di stringhe, o operazioni numeriche.

In poche parole: + è il più veloce.

14

la domanda è già risposto, ma quando ho visto la prima volta ho pensato di NodeJS Buffer. Ma è molto più lento del +, quindi è probabile che nulla possa essere più veloce di + in concetanation di stringhe.

testato con il seguente codice:

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."); 

uscita:

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

Con quel buffer, stai inizializzando un wrapper contenente una stringa, quindi stai costruendo una matrice dai 2 wrappers, avendo la funzione di concatenazione loop attraverso l'array, (E probabilmente usa '+ 'per concatenare le stringhe), e restituirlo. Penso che questo spieghi perché il buffer è lento. – Cerbrus

1

hai chiesto di prestazioni. Vedi questo perf test confrontando 'concat', '+' e 'join' - in breve l'operatore + vince di gran lunga.