2010-12-03 8 views
0

私はアクションを持っています。これは、ページ上のチャートのデータを返します。 chartTypeパラメータをとり、グラフデータを返します。ページはjQueryと$.post関数を使用して呼び出します。ここに例があります:

var fillChart = function (chartData){ /* fill routine here */}; 

$(function() { 
    $.post(
     '/Charts/ChartsJson', 
     'chartType=Type1', 
     fillChart, 
     'json'); 

    $.post(
     '/Charts/ChartsJson', 
     'chartType=Type2', 
     fillChart, 
     'json'); 

    // other calls here [*] 
}); 

私は、処理すべきchartTypesの配列を持っています。コメントした行の後にすべての呼び出しを追加すると、すべてが一度に送信されます。 1〜3個の項目がある場合は大丈夫です。しかし、より多くのアイテムがある場合は、パフォーマンスが悪いです。
同時に実行される投稿要求の量を制限する方法はありますか?
私は、最初の投稿のコールバックを使用することができ、2番目を呼び出すことができることなどを知っています。私の質問は「他の方法はありますか?

UPD:各コールはすでにパーティション化されています。 (そして、私の配列内の項目の量は、常に知られているわけではありません)このアクションは、呼び出しごとに約1000の複雑な要素を返します。
すべてのデータの合計抽出には20を取ることができるchartTypeは、 、さらに40秒。だから私はそれが処理されているので、外出先でそれを表示したい。

+0

同様の質問:http://stackoverflow.com/questions/4098826/how-can-i-call-ajax-synchronously-without-my-web-page-freezing –

+0

あなたは正しいです。私の質問を削除する必要がありますか? –

答えて

4

私はアドホック "メッセージキュー"をうまく設定できました。メッセージは、jsonオブジェクトで、ポストのパラメータをデータとして持つことができます。任意の数の労働者がオブジェクトをキューから引き離すことができます。例えば

var ajax_message_queue = []; 

ajax_message_queue.push({ 
    "ajaxtype" : "post", 
    "action" : '/Charts/ChartsJson', 
    "data"  : handlers.fillChart, 
    "datatype" : "json" 
}); 

作業者は、単に最も古いメッセージをオフにポップし、それを実行するのsetTimeout基づく関数であろう。最初の作業が完了するまで、作業者は次のメッセージをポップすることをブロックできます。あなたが望むならば、失敗した場合にはその依頼をやり直すことさえできます。

+0

私はそれを感謝します。例はどこに見えますか。 (私のためにそれをきれいにする必要はありません、私はURLを与えます、私は対処します) –

+0

残念ながら、私はそれを使用したすべての場所は管理セクションの背後にあり、ログインを必要とするか、 – chrishomer

1

これはブラウザによって自動的に行われます。ウェブブラウザは、一度に1つのサーバに特定の数のHTTPリクエストを送信することはありません。完了すると自動的にキューに入れられ、実行されます。

パフォーマンスを向上させたい場合は、複数のアイテムを一度に送信できるようにサーバーサイドコードを書き直すことをおすすめします。

+0

@The_Smallest私はあなたが「それぞれの投稿要求が大きな部分を求めている」ということをどういう意味か分かりません。私の提案は、1つのPOSTリクエストで配列全体のすべてのデータを送信することです。 – lonesomeday

+0

でも、すべてのブラウザが同じ設定であるとは限らず、一部のブラウザで他のブラウザを制限することはできません。 – RobertPitt

+0

ありがとう、私は私の質問を説明するように更新しました。 –

0

おそらくすべてのデータを一度に送信する必要があります。入力配列の構造を変更してchartTypeキーにします。そのようにしてバックエンドでそれに応じて対応することができます