1

次のように、何百もの Javascript 文字列を連結する必要があります。

var result = '';
for (var i = 0; i < 300; i ++ ) {
    result += DATA[i] + 'Some Dynamic Text';
}

かなり大きいDATA[i]です(300KB以上のように、画像のbase64が表す)。

このコードを実行すると、ブラウザーでメモリ オーバーフロー エラーがポップアップ表示されます (ブレーク ポイントは ですresult += DATA[i]) 。

この種のメモリの問題を回避するために、このコードを最適化するにはどうすればよいですか?

==== 編集 ====
以前は明確にしなかったので、DATA[i]がかなり大きく、変更できないと考えることができます。すべての連結には、動的テキストも追加されます。

4

3 に答える 3

0

ここを見てください..これはあなたを助けるはずです

Javascript と非常に長い文字列

また、Javascript StringBuilder を見てください -

http://www.codeproject.com/Articles/12375/JavaScript-StringBuilder

于 2013-08-12T11:28:50.417 に答える
0

次を使用してデバッグできますtry {} catch

var result = '';
for (var i = 0; i < 300; i ++ ) {
    try {
      result += DATA[i];
    }
    catch ( e ) {
        console.log('An error occured on DATA[' + i + ']');
        console.log('Value:' + DATA[i]);
        console.log(e);
    }
}

画像をオフラインで保存したいのに、画像を base64 に保存してフロントエンドに送信するのはなぜですか? そのためのキャッシュ制御ではないでしょうか。

これ以上の情報がなければ、そのアプローチを使用することをお勧めできません:(

ただし、評価者は、画像自体に永続的なキャッシュを設定する方法を調べます。


ところで、ネイティブ配列のArray.join場合は次のように使用できます。DATA

var result = DATA.join('');

DATAが object ( arguments, ) のような配列の場合は、{'0': 1, '1': 2, length: 2}次を使用できます。

var result = [].join.call(DATA, '');

これはメモリオーバーフローを解決したいのですが、より高速になります。

于 2013-08-12T10:46:15.293 に答える