2012-06-18 9 views
6

私はある種のオンラインマルチユーザーエディタ/ coopインターフェイスに取り組んでいます。これは、1ページのライフタイム中に(数千もの)ajaxリクエストをたくさん実行します。 (安定性の面で「最良」、互換性、トラブルを避ける)Ajax-intensiveページ:毎回同じXMLHttpRequestオブジェクトを再利用するか、新しいものを作成しますか?

  1. 1つのXMLHttpRequestオブジェクトを作成し、すべてのHTTPリクエスト

  2. のための新しいのXMLHttpRequestを作成していることを再利用:最高のだろう何

    すべてのHTTPリクエストのオブジェクト

  3. XMLHttpRequestオブジェクトの動的な「プール」を管理し、HTTPリクエストを開始するときに新しいものを作成し、既存のオブジェクトがない場合は、 bject「利用可能」としてその最後の要求は私が前のもの等、まだ終わっていない間、私は新しい要求を開始することができる失敗する可能性があり、いくつかの要求を起こし、1はオプションではないと思う

正常に完了したとき

2については、これはメモリリークであると推測されます。または、メモリ/リソースの使用が非常に不愉快になることがあります。または、オブジェクトの要求が完了したら、何らかの方法でオブジェクトを閉じたり削除したりできますか? (ここで/ how?)あるいはJSガベージコレクタはこれを適切に処理しますか?

これまでに3度も試みたことはありませんでしたが、両方の世界の最高のように感じます。それとも不要なようなアプローチですか、あるいは私はまだ潜在的な問題を抱えていませんか?正確にいつ私が要求を終えると仮定することができますか(つまり、オブジェクトは新しい要求に利用可能です)、それはreadyState 4とhttpステータス200を受け取ったときでしょうか? (それ以降、更新やコールバックがこれ以上続くことはありませんか?)

+0

あなたが何千ものリクエストで正しければ、このスクリプトは非常にリソースを使っているので、あなたが使用しようとしているサーバーと使用しているインターネットが何であるか不思議です。 – gabeio

+0

私は残酷な専用サーバーを用意しています。しかし、何千ものリクエストは、数時間の間に実行されることが期待されています。毎秒のリクエストとは異なります。もっと毎分のようなものですが、何時間もそれを続けているかもしれません。 –

+0

ああ、JavaScriptがうまくいくかどうかは、速くても速いです。つまり、毎秒のリクエストです。フラッシュまたはJavaアプレットを使用することをお勧めします。 – gabeio

答えて

3

必要なときに新しいものを作成します。 GCはもう不要になったら古いものを処理します。

しかし、協調エディタのようなものでは、常にリクエストを送信する代わりにWebSocketsを使用することを検討してください。小さなHTTPリクエストのオーバーヘッドは巨大ですが、WebSocket接続ではオーバーヘッドはほとんどありません。

+0

ありがとう、私は簡単な方法(毎回新しいオブジェクトを作成する)同様にWebSocketに追加します。ちょうど確かに、あなたは新しいHTML5のjavascript websocketのことを参照していますよね? –

+1

はい、おそらく 'socket.io'のようなライブラリで、必要に応じて自動的にXHRフォールバックを処理します。 – ThiefMaster

+0

ああ、これまで聞いたことがない、ありがとう! 1つのこと、http://socket.io/のコード例では、JavaScriptコードのサーバー側を使用しているようですか?誰が、またはそのコードを実行するはずですか? –

関連する問題