2012-04-08 13 views
1

複数のユーザーが同時に私のページにアクセスし、各クライアントが( setInvervalを使用して)データベースから値を読み取り、それを印刷する別のPHPスクリプトをポーリングします。jQueryのポーリングは高価ですか?代わりがありますか?

setInterval("printData();", 300); 

私はjQueryとJavaScriptに比較的新しいんだ、と私は常に、このPHPスクリプトを実行すると、常にデータベースクエリを作るの生存能力の少し懐疑的です。

私の神経を落ち着かせるか、現在の方法の代替手段を提供する人はいますか?

+0

質問を、?あなたは3つの選択肢があります:ポーリング、ロングポーリング(別名隠しフレーム)またはウェブソケット。 [SignalR](https://github.com/SignalR/SignalR)は、ブラウザのサポートに応じて、長いポーリングまたは通常のポーリングへのフォールバックを伴うウェブソケットを使用するjs/.NETライブラリです。 PHPでもこれを使うことができます。 –

+0

long-polling/websocketは、データベースの値が変更されたときを制御し、現在接続されているクライアントに通知するイベントメカニズムを配置できる場合にのみ有効です。変更されたデータをクライアントにプッシュできます。 –

+0

私は[ここ](http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery)で述べた3つのテクニックのjQueryの例を見つけることができます –

答えて

6

0.3秒ごとに更新しています。これは1秒に3回以上です。あまりにも多く。どのように滑らかにする必要があるかに応じて、多くても5秒ごとに更新してください(5000)。

また

、ちょうどそれが少し速く作るために、単に引用符や括弧をドロップ:データベース変更に値を行い

setInterval(printData,5000); 
+0

私はデータを1秒間に5回以上更新したいと思います。それをポーリングして値を印刷するのではなく、データベースの変更によって引き起こされるすべてのクライアントのデータを更新できる方法はありますか? –

+4

ここでは 'setInterval'がおそらく最適なオプションではないことに言及する価値があります。あなたのAJAX呼び出しの成功ハンドラで 'setTimeout'を再帰的に使う方が良いでしょう。 –

+1

あなたは長いポーリングを探しています。つまり、クライアントはHTTPリクエストを送信しますが、サーバー(PHPスクリプト)はデータが変更されるまで応答しません。クライアントはこの変更を即座に受け取ります。 HTTPサーバーが長いポーリング接続を閉じる場合、タイムアウトのために、クライアントは即座にHTTP要求を繰り返して接続を再作成します。 –

関連する問題