timeOut
を使用して15秒おきにDIV
を自動更新するサイトを作成しました。 これは非常に効果的ですが、DIV
が実際に更新されるまでに最大5分かかる場合があります。変更する前にスクリプトを20回に送信します。高価な帯域幅とサーバーのパフォーマンスのかなり良い無駄:setTimeoutからAJAXコールにロングポーリングタイムアウトで
私は多くのことについて多くを読んでいたLong Polling
と私はそれを行ってきた。
私のAJAX呼び出しがあった。
intval = window.setTimeout(function() {
$.ajax({
type: 'GET',
cache: false,
url: 'url',
beforeSend: function() { $('#timerimg').attr('src', 'img/icons/loading.gif'); },
success: function(data) { $('#ajaxcontent').html(data); },
complete: function() { $('#timerimg').attr('src', 'img/icons/stop.gif'); }
});
}, 15000);
この機能は、繰り返しに保持されることにタイムアウト機能を作ったすべての時間を、リフレッシュされてページ内に配置しました。
は今、私はhi.txt
へのURLを設定し、Hello World!
を書き、それが常に終了し、新しい投票をやって作っていた場合
(function poll() {
$.ajax({
type: 'GET',
cache: false,
url: 'url',
success: function(data) { $('#ajaxcontent').html(data); },
complete: poll,
timeout: 30000
});
})();
シンプルなロングポーリング機能を作成するためにhttp://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jqueryに従うことをしようとしています。明らかに多くの同時世論調査を意味します。
これを修正するにはどうすればよいですか?
AND:
autorefreshing DIV
巨大SQL-Server
クエリからの計算と大きなチャートです。だから、ちょうどちょうどちょうどちょうど.getRows()
のSQLのクエリの後に(元と比較して)に変更があったかどうかを確認する必要がありますか?
私はjQueryとASP-Classicですべてをやっています。
非常に大きなバックボーンインターネット接続に設置された自分のラックサーバーであるため、同時接続制限が問題になるとは思われません。現在の問題は、データベースが瞬時に更新されることがないということです。私はネット上でいくつかのブログを読んでいます。呼び出された.aspファイルでSQLクエリを実行すると、まずデータベースから元のデータがフェッチされ、その後、データが変更されるまで同じデータを何度も何度も繰り返しフェッチするループを実行し、新しいデータをブラウザに送り返します...しかし、これでは膨大な帯域幅が作成されませんか? – Behrens
データベースのバックエンドに関しては、データが更新されるたびにタイムスタンプがあるか、DBAに提供するように依頼する必要があります。そのタイムスタンプで、最後のタイムスタンプをチェックすることができます。最後のポーリングよりも大きい場合は、一度大きなクエリを取得します。プルするたびに、新しい時間であなたの投票を更新してください。また、あなたの長い投票でデータベースを叩くべきではありません。あなたのユースケースが応答性のために何秒間でもそれを眠るように教えてください。 –
それでは、データベースの各行に「最後に変更された」タイムスタンプを追加してから、その1つのタイムスタンプを選択して、リクエストのタイムスタンプを保持しないようにしてください。データベースからすべてを選択し、数学を実行してユーザーにプッシュします。それはまだ2秒ごとにDBからのプルです。しかし、それはお金の問題ではない内部trafik ..それは良い解決策になる可能性がありますか? – Behrens