7

Javascript で一連の文字列を連結する必要があり、そのための最速の方法を探しています。Javascript が大きな XML「ファイル」を作成する必要があると仮定しましょう。当然のことながら、このファイルは多数の小さな文字列で構成されています。だから私は思いついた:

    var sbuffer = [];
    for (var idx=0; idx<10000; idx=idx+1) {
        sbuffer.push(‘&lt;xmltag>Data comes here... bla... </xmltag>’);
    }
    // Now we "send" it to the browser...
    alert(sbuffer.join(”));

例を構築するループやその他の「洗練された」コードには注意を払わないでください。

私の質問は次のとおりです。文字列の数が不明な場合、多くの小さな文字列を巨大な文字列に連結するためのより高速なアルゴリズム/方法/アイデアはありますか?

4

7 に答える 7

15

質問JavaScript 文字列連結には、 JavaScript 文字列連結パフォーマンスの非常に優れた比較にリンクする受け入れられた回答があります。

編集: 記事が示唆するように、Duff のデバイスを使用することで、もう少しパフォーマンスを向上させることができると考えていたでしょう.

于 2008-09-30T14:52:00.270 に答える
13

行の変更:

sbuffer.push(‘Data comes here... bla... ’);

sbuffer[sbuffer.length] = ‘Data comes here... bla... ’;

5 ~ 50% の速度向上が得られます (ブラウザーによって異なりますが、IE で - 速度向上が最も高くなります)。

よろしく。

于 2008-09-30T15:45:12.983 に答える
1

私の知る限り、あなたのアルゴリズムは優れており、文字列連結の問題に対するパフォーマンスの高いソリューションとして知られています。

于 2008-09-30T14:55:48.123 に答える
1

私はあなたが最適にかなり近づいていると思います。YMMV では、ホスト プロセス (ブラウザなど) の JavaScript エンジン内で大幅な速度の増減が発生します。

于 2008-09-30T14:50:45.203 に答える
1

文字列を配列にプッシュしてから配列に結合するのが、JavaScript での文字列連結の最速の手法だと思います。W3C DOM と innerHTML に関するこの議論には、裏付けとなる証拠がいくつかあります。innerHTML 1 と innerHTML 2 の結果の違いに注意してください。

于 2008-09-30T14:53:13.420 に答える
0

You might get a little more speed by buffering.

于 2008-10-01T06:07:55.747 に答える
0

IE の悪いガベージ コレクタに注意してください。使用後、アレイをどうするつもりですか? おそらくGCされますか?

ジョインとの連結でパフォーマンスが向上し、ポスト GC で失われる可能性があります。一方、配列を常にスコープ内に残し、再利用しない場合、それは良い解決策になる可能性があります。

個人的には、最も簡単な解決策が欲しいです: += 演算子を使用するだけです。

于 2008-09-30T18:44:15.720 に答える