2012-04-27 13 views
8

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

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

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

事前

+0

問題はうそんを見ることができますか? jQueryのJSON解析では?またはあなたのコードは、JSONを解析? – Joseph

+0

1MBのJSON?プレーンテキストの1MB ??? 1つのWebページに何を表示しようとしていますか?たぶんあなたはあなたの質問を忘れるべきです! – Amberlamps

+1

@Amberlampsおそらくあなたが「再考する」という意味ですか? JSONのゲームマップ、またはBase64でエンコードされたスプライトマップを読み込むと、通常は1MB以上が表示されます。それは合理的ですが、はい、彼らは時には過剰です。 – Joseph

答えて

8

に感謝の推測では、巨大なJSON応答を解析すると、それは遅延を引き起こして何であるということです。その場合、次のオプションがあります。

  1. 複数のリクエストにサーバーレスポンスを分割します。
  2. 解析を複数の部分に分割します。
  3. Webワーカーに応答を送信し、ウェブワーカーで解析します(古いブラウザでは機能しません)。

複数の部分に解析を破るために、あなただけの生のテキストを返すためにjQueryのAJAX呼び出しを変更する必要があります、あなたはsetTimeout()にチャンクで作業を行うことができ、独自のJSONパーサーを作成する必要があるだろう解析中にUIが存続することがあります。これは、反復可能な作業量になります。私はあなたが既存のJSONパーサを使い始めることを前提としています。そして、それを変更して、それをチャンクで動くように状態を保存しなければなりません。

JSONの一部を取得するためにサーバーとのインターフェイスを変更すると、サーバーへのインターフェイスを適切に変更することができれば、問題を簡単に解決できます。チャンクで大規模なデータを処理する方法についていくつかの代替のアイデアについては

、あなたはBest way to iterate over an array without blocking the UI

関連する問題