8

JQuery ajax 関数を使用し、応答が 1 MB と非常に大きい場合、成功関数が呼び出される直前に UI がフリーズします。JSON.parse 関数と大量のデータの解析でこれを経験しました。この関数は、コンテンツを JSON にフォーマットするリクエストの戻り時に使用されると思います。これが私が使用しているコードです。

$.ajax({
        url: "/sessions/" + this.get("session_id") + "/get_sample_data",
        data: params,
        dataType: 'json',
        type: "GET",
        success: function (response) {
            success(response);
        }
    });

とにかく応答のコードをオーバーライドして、解析を部分にずらして、できればUIのブロックを最小限に抑えることができますか? または、これを修正する別の方法があります。私はクロムとクロムカナリアを使用していますが、両方で同じ結果が得られます。

前もって感謝します

4

1 に答える 1

8

巨大な JSON 応答の解析が遅延の原因であると推測されます。その場合は、次のオプションがあります。

  1. サーバーの応答を複数の要求に分割します。
  2. 解析を複数の部分に分割します。
  3. 応答を Web ワーカーに送信し、Web ワーカーで解析します (古いブラウザーでは機能しません)。

解析を複数の部分に分割するには、生のテキストのみを返すように jQuery ajax 呼び出しを変更する必要がありsetTimeout()、UI を維持できるようにチャンクで作業できる独自の JSON パーサーを作成する必要があります。解析中。これは妥当な量の作業です。既存の JSON パーサーから始めて、チャンクで機能するように状態を保存するように変更する必要があると思います。

サーバーへのインターフェースを変更して JSON の一部を取得することは、サーバーへのインターフェースを適切に変更できる場合、おそらく問題を解決するためのより簡単な方法です。

大きなデータをチャンクで処理する方法に関するいくつかの代替案については、UI をブロックせずに配列を反復処理する最良の方法を参照してください。

于 2012-04-27T06:03:35.440 に答える