Rozumiem, że robi coś jakszybki sposób łączenia ciągów w nodeJS/JavaScript
var a = "hello";
a += " world";
jest stosunkowo bardzo powolny, jak przeglądarka robi w O(n)
. Czy jest to szybszy sposób bez instalowania nowych bibliotek?
Rozumiem, że robi coś jakszybki sposób łączenia ciągów w nodeJS/JavaScript
var a = "hello";
a += " world";
jest stosunkowo bardzo powolny, jak przeglądarka robi w O(n)
. Czy jest to szybszy sposób bez instalowania nowych bibliotek?
Jest to najszybszy znany sposób łączenia ciągów w javascript.
Aby uzyskać więcej informacji, zobacz:
Why is string concatenation faster than array join?
JavaScript: How to join/combine two arrays to concatenate into one array?
W moich testach konkatenacja ciągów była 10 razy szybsza niż array.join w nodejs v 0.12.2 (i 100 razy szybsza niż util.format) http://edsykes.blogspot.de/2015/08/a-quick-comparison -of-speed-of.html –
Nie ma żadnego innego sposobu w JavaScript do łączenia ciągów.
Można teoretycznie używać .concat()
, ale to way slower niż tylko +
biblioteki są nie częściej niż wolniej niż rodzimej JavaScript, zwłaszcza na temat podstawowych operacji, takich jak łączenie strun lub operacji numerycznych.
Po prostu: +
jest najszybszy.
pytanie jest już odpowiedź, ale kiedy pierwszy raz zobaczyłem to pomyślałem o NodeJS Buffer. Ale jest wolniejszy od +, więc prawdopodobnie nic nie może być szybsze niż + w konketaniu łańcuchów.
Testowane z następującego kodu:
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.");
wyjściowa:
Normal took: 4 ms.
Buffer took: 458 ms.
Za pomocą tego bufora inicjujesz wrapper zawierający ciąg, a następnie budujesz tablicę z 2 owijaczy, dzięki czemu funkcja concatenate przechodzi przez macierz (prawdopodobnie używasz '+ 'aby połączyć łańcuchy) i zwróć go. Myślę, że to tłumaczy, dlaczego bufor jest wolny. – Cerbrus
Pytałeś o wydajności. Zobacz: perf test, porównując "concat", "+" i "join" - w skrócie operator + wygrywa zdecydowanie.
Nawet jeśli to by było prawdą (że konkatenacja łańcuchów jest bardzo powolna), czy twój kod tak bardzo od niej zależy, że ma znaczenie? – WTK