web-dev-qa-db-ja.com

nodeJS / JavaScriptで文字列を連結する高速な方法

私は次のようなことをすることを理解しています

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

ブラウザはO(n)でそれを行うので、それは比較的非常に遅いです。新しいライブラリをインストールせずにこれを行うより速い方法はありますか?

50
Yotam

これは、javascriptで文字列を結合することが知られている最速の方法です。

詳細については、以下を参照してください。

なぜ文字列連結は配列結合よりも速いのですか?

JavaScript:2つの配列を結合/結合して1つの配列に連結する方法

37
Azodious

質問はすでに答えられていますが、私が最初にそれを見たとき、NodeJS Bufferについて考えました。しかし、それは+よりもずっと遅いので、文字列のコンタクタネーションでは+より速くなることはないでしょう。

次のコードでテスト済み:

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

出力:

Normal took: 4 ms.
Buffer took: 458 ms.
16
Mustafa

JavaScriptには、文字列を連結する他の方法はありません。
理論的には.concat()を使用できますが、それはただ+よりもはるかに遅いです

ライブラリは、特に文字列の連結や数値演算などの基本的な演算では、ネイティブJavaScriptよりも遅くはありません。

簡単に言えば、+が最速です。

8
Cerbrus

パフォーマンスについて尋ねました。これを参照してください perf test 'concat'、 '+'、および 'join'を比較します-要するに+演算子が勝ちます。

1
Stuart Hallows