私は毎秒30秒ごとに更新をチェックする私のサイトの複数の部分を持っているので、メッセージなどを警告することができます。しかし、setIntervalを使って$ .postを使用するとサイト上で重くなる可能性があります。これらのタスクのために推奨される代替方法がありますか?setIntervalを使用せずに非同期更新を作成するより良い方法はありますか?
答えて
socket.ioデータベースクエリをプロファイリングしてみてください。それ以外の場合は、this jQuery pluginをチェックアウトすると、socket.ioほど包括的ではないにもかかわらず、正常な劣化が実装されます。
ニースのプラグイン!あなたは軽量のWebサーバーを必要としませんか?ユーザーあたりのApache/PHPプロセスが急速にサーバーを突然撃退します... – cmc
プロジェクトに依存して、ほとんどの初期のWebサイトはたぶんいずれかの時点で20〜50人のユーザーしか持っていません。そして、それはあなたがPHPを拡大することができないことを意味するわけではありません、wordpress.comやfacebookを見てください。 – soemarko
確かにPHPをスケールすることができます...私はちょうどwebsocketとPHP/Apacheは長いポーリングやPHP/Apacheより優れていないと思われます。短いポーリング、確かに、問題ありません。 – cmc
ありがとうございます。
より良いアプローチ
あなたは、接続を開き、それは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を使用している場合は移動するための方法だろうに/データソース
- 1. マップを同期させるためにチャネルを使用するより良い方法はありますか?
- 2. jQuery UIを使用せずにjQuery UIウィジェットファクトリを使用するより良い方法はありますか?
- 3. 非同期更新を使用するHTTPキャッシングプロキシはありますか?
- 4. setInterval()関数を使用せずにノードJSのテーブルの変更をリッスンするより良い方法はありますか?
- 5. ObservableCollectionを使用せずにリストをロードするより良い方法はありますか?
- 6. エンティティフレームワークでエンティティを更新するより良い方法はありますか?
- 7. 台所のインスタンスを再作成せずにゲストポート番号を更新するより良い方法はありますか?以下
- 8. 一般的なDbCommandを使用して非同期更新を行う方法はありますか?
- 9. [C#] [WPF] UIをフリーズせずに非同期TreeViewを作成する方法は?
- 10. 非同期更新ItemsControl Datagridの内部(またはより良い方法を提案)
- 11. ASP.NETでストアドプロシージャを使用するより良い方法はありますか?
- 12. will_paginateでヘルパーメソッドを使用するより良い方法はありますか?
- 13. ディレクトリを非同期に作成する(FileSystemWatcherを使用せずに)?
- 14. 文字列の書式設定とexecを使用せずに、ダイナミック関数を作成するより良い方法はありますか?
- 15. 「タマネギ」非同期コールを作成したり、連続して作成する方が良いですか?
- 16. ジョイントを使って非同期モックが動作しない、より良い方法や簡単な方法がありますか?
- 17. ポーリングや選択ではなく、C++で非同期TCPソケットを使用するより良い方法はありますか?
- 18. 待たずに非同期操作の結果を待つ方法はありますか?
- 19. ログインページを作成するには、より良い方法です。
- 20. System.Net.WebClient - 非同期を使用する必要があります
- 21. setTimeoutを同期させる方法はありますか?
- 22. 各レンダリングで新しいフォントインスタンスを作成せずに、Slick2Dでフォントサイズをアニメートする方法はありますか?
- 23. Windows Phoneアプリケーションの同期化などの非同期操作を実行する方法はありますか?
- 24. 非同期に更新されるコンテンツを作成するPHP
- 25. IListを非同期的にフィルタリングする方法はありますか?
- 26. XPServerCollectionSourceを非同期にロードする方法はありますか?
- 27. PHPページを呼び出すimgタグを更新するより良い方法はありますか?
- 28. 状態の更新は非同期である可能性があります
- 29. より良い方法は、Webインターフェイスを使用してゲームサーバーを作成する
- 30. 要素を作成してテキストを周囲に追加するより良い方法はありますか?
setIntervalは、間違いなく非同期イベントを設定する最良の方法です。あなたは複数の部品を持っていると言います、それぞれ独自のPOSTですか?それは重い部分のように思える。 1つのリクエストですべてのデータを取得する方がよい。 – loganfsmyth
これらのリクエストを本当に遅くする必要があります。 HTTPリクエストを0.5秒ごとに発生させるのは大変です。 20-30秒はやや穏やかです。 Webソケットを使用するのが理想的です。 – josh3736
間隔を広げることができますので、あまりにも多くの処理を必要としません。ここではCometという用語の下にあるメソッドです。http://en.wikipedia.org/wiki/Comet_(programming) – Joseph