3

重複の可能性:
Javascript のメモリ制限

私は、ページの読み込み時に約 150 MB の XML データ ファイルを読み込むクライアント側の JavaScript を使用して、html ページの作成に取り組んでいます。ファイル サイズが約 5 MB の場合、データ全体を配列にロードするのに 30 秒かかりました。しかし、ファイルを 140 MB に変更すると、ページが Firefox で応答せず、Chrome で突然クラッシュします。データをロードするための私のスニペットは、xml の個々のタグごとに処理されます。私の質問は、javascript のヒープ サイズに制限はありますか? 私の研究を強調するには、学術論文のリソースが望ましいです。

$(document).ready(function () {
        // Open the xml file
        $.get("xyz.xml", {}, function (xml) {
            // Run the function for each  in the XML file
             $('abc', xml).each(function (i) {
                a = $(this).find("a").text();
                b = $(this).find("b").text();
                c = $(this).find("c").text();
                ab = $(this).find("ab").text();
                bc = $(this).find("bc").text();
                cd = $(this).find("cd").text();
                de = $(this).find("de").text();
                // process data
              dosomething(a,b,c,ab,bc,cd,de);
                   }); }); });
4

2 に答える 2

2

私は限界を知りません。1Gbのファイルでも読み込めました。はい、ほとんどのメモリがページングされるため、最初は読み込みが遅く、すべての実行が遅くなりました。

ただし、これほど大きな JavaScript オブジェクトを 1 つロードしようとすると問題が発生します。これは主に、パーサーが大きすぎるオブジェクトを解析できないためです。ブラウザーで JavaScript が処理できるオブジェクトのサイズの制限に達しましたか? を参照してください。

その場合の解決策は、単一のリテラル ステートメントを使用するのではなく、JavaScript オブジェクトの作成を複数の段階に分割することでした。

于 2013-01-30T23:02:00.057 に答える
1

改善することが多すぎるからです。まず、jQuery を高速化するために 76 バイトを投稿することをお勧めします。したがって、それに頼って $(this) を $_(this) に置き換えます。メモリと時間を大幅に節約できます!!

単一の jQuery オブジェクトを使用したくない場合は、次のように変数をキャッシュしてください。

$('abc', xml).each(function (i) {
   var $this = $(this);
   a = $this.find("a").text();
   ....
});

dosomething 関数を提供して、それを改善しようとすることができます

于 2013-01-30T22:30:33.093 に答える