2012-03-13 3 views
3

私は毎秒30秒ごとに更新をチェックする私のサイトの複数の部分を持っているので、メッセージなどを警告することができます。しかし、setIntervalを使って$ .postを使用するとサイト上で重くなる可能性があります。これらのタスクのために推奨される代替方法がありますか?setIntervalを使用せずに非同期更新を作成するより良い方法はありますか?

+1

setIntervalは、間違いなく非同期イベントを設定する最良の方法です。あなたは複数の部品を持っていると言います、それぞれ独自のPOSTですか?それは重い部分のように思える。 1つのリクエストですべてのデータを取得する方がよい。 – loganfsmyth

+0

これらのリクエストを本当に遅くする必要があります。 HTTPリクエストを0.5秒ごとに発生させるのは大変です。 20-30秒はやや穏やかです。 Webソケットを使用するのが理想的です。 – josh3736

+0

間隔を広げることができますので、あまりにも多くの処理を必要としません。ここではCometという用語の下にあるメソッドです。http://en.wikipedia.org/wiki/Comet_(programming) – Joseph

答えて

1

socket.ioデータベースクエリをプロファイリングしてみてください。それ以外の場合は、this jQuery pluginをチェックアウトすると、socket.ioほど包括的ではないにもかかわらず、正常な劣化が実装されます。

+0

ニースのプラグイン!あなたは軽量のWebサーバーを必要としませんか?ユーザーあたりのApache/PHPプロセスが急速にサーバーを突然撃退します... – cmc

+0

プロジェクトに依存して、ほとんどの初期のWebサイトはたぶんいずれかの時点で20〜50人のユーザーしか持っていません。そして、それはあなたがPHPを拡大することができないことを意味するわけではありません、wordpress.comやfacebookを見てください。 – soemarko

+0

確かにPHPをスケールすることができます...私はちょうどwebsocketとPHP/Apacheは長いポーリングやPHP/Apacheより優れていないと思われます。短いポーリング、確かに、問題ありません。 – cmc

4

ありがとうございます。

より良いアプローチ

あなたは、接続を開き、それは20代かそこらのために開いたままにし、すぐにそれを再オープンし、長いポーリング(または「彗星」)を、使用することができます。サーバーはいつでも何かを送ることができます。

新しいブラウザでは、永続的な接続を提供するWebソケットが提供されます。

どちらも比較的コードが複雑であるため、あなたのために対処するにはsome kind of frameworkが必要です。また、ユーザーごとに接続を開いたままにする必要があるため、NodeJSのような軽量なものでのみ動作します。

簡単にアプローチ

あなたは実装が簡単何かをしたい場合は、(それが長いポーリング/ WebSocketをして、それを対比するために、短いポーリングと呼ばれています)提案されているように、私は更新のチェックをお勧めします。

window.setInterval(function() { 
    // More lightweight than $.post 
    $.get('/datasource', function() { 
    /* do something */ 
    }); 
}, 3000); 

3秒間隔have been used in used before by high profile people:あなたはそうのような単純なポーリングソリューションを行うことができます。

物事が遅くなる場合は、nodeJSを使用している場合は移動するための方法だろうに/データソース

+3

+1 - ロングポーリング/ウェブソケットは本当にこれを行う適切な方法です。プラス、[すべてのハードワークは既に行われています。](http://socket.io/) – josh3736

+0

リンクjoshのおかげで!これが素晴らしいフレームワークであることを確認します。私の非常に有能な知見は、これをいくつかの深刻なリアルタイムのものにうまく利用しています。 – cmc

関連する問題