5

たとえば、1 秒あたり 100 クエリを処理できる Web スケールのパブリック サイトを構築する必要があります。Ajax を使用してインタラクティブにしたいと考えています。Ajax は、すべての主要なブラウザーとすべての妥当な状況 (クライアント側からページを停止、再起動する、一晩端末を離れた後に戻ってくるなど) に対して防弾でなければなりません。サーバーは分散 Linux ファームになります。

Jquery $.post() は、法案に適合するようです。

昔の Ajax は、サーバーとクライアントの間でソケットを開いたままにする巧妙なスキームによって実装されていました。次に、このアプローチは、「Ajax プッシュ」、別名「HTTP サーバー プッシュ」または「コメット」をサポートします。これは、サーバーがクライアントへのパケットを開始できるようにする双方向通信パイプです。

この Ajax アプローチで私が目にする主な問題は、サーバー上のソケットが無期限に拘束されるように見えることです。これはスケールしないようです。2 つ目の問題は、モデム接続を一晩中切断するとパイプが切断されることです。保存されたローカル バージョンからページをリロードしても、おそらくライブ パイプは再確立されません。また、さまざまなブラウザーでは、そもそも Ajax を機能させるためにさまざまな信頼性の低いハックが必要です。

ポスト リクエストに基づく Ajax の厳密な「クライアント プル」モデルを使用すると、これらの欠点がすべて解決されるように思われます。防弾実装基板を手に入れることができれば、リクエストされていないサーバープッシュの容量を喜んで放棄します。

したがって、私は単純な 呼び出しを使用しています。これは、少なくとも Firefox と Safari ではうまく機能するようです。
$.post( 'serverAjaxModule.php' ,
{mydata: Dataword },
function(output){ do_handle_results( output); });

ただし、これがボンネットの下で何をしているのかわかりません。.post は .ajax のマクロであり、.ajaxSetup や .ajaxStart など、必要と思われる名前を持つコマンドがいくつかあるようです。そして、jquery-ui.min.jsセットアップとしてほとんど何でも実行できるインクルードがあります。

私の質問、それから:

  1. jquery $.post は、大規模な使用に対して適切にスケーリングされますか?

  2. $.post は古い連続オープン ソケット パラダイムで実装されていますか、それともクライアント プル ajax メッセージを実行するたびに新しいソケット接続を確立しますか? 含意?

  3. .ajaxSetup や .ajaxStart など、余分なものを呼び出す 必要はなく、異常な結果なしに $.post を正常に呼び出すことができると考えるのは正しいですか?

  4. この機能に対するjqueryのクロスブラウザ機能はどの程度優れていますか? 基本的にすべての合理的な最新のブラウザーで機能するだけで信頼できますか、それとも注意が必要な既知のブラウザーはありますか?

  5. この Ajax テクノロジへのアプローチは、古代のブラウザーにどのくらい前から適用されているのでしょうか? .post はラウンドトリップ POST テクノロジーを使用しているように見えますが、これは完全に普遍的で防弾でなければなりません。それでも、一部のブラウザーは古すぎて Ajax をサポートできず、その周りで苦労してコーディングしなければならなかった、古いテクノロジーのケースを覚えているようです。新しい jquery の登場で、そんな時代は終わりましたか? 文明化された国際的な世界では、Ajax 以外のサポートについてどの程度心配する必要がありますか?

  6. 他に気をつけることはありますか?非常にスケーラブルな実装を構築し始めたばかりの場合、動的でインタラクティブな Web エクスペリエンスの作成について誰かに教えてほしかった最も重要なポイントは何ですか?

平素は格別のお引き立てを賜り、誠にありがとうございます。

4

2 に答える 2

3

$.ajaxSetup必須ではありませんが、便利です:

  • を実行する$.postと、エラー処理関数を定義できず、デバッグが困難になります。この場合、一般的なエラー関数を で定義できます$.ajaxSetup
  • を実行して、$.post表示する必要がある HTML データを受け取り、その要素にイベントをバインドする必要がある場合、これらの新しいオブジェクトに再適用するイベント ハンドラーを定義できます。

$.ajaxStartも必要ありません。

jQuery UI は、通常、ドラッグ アンド ドロップ要素の動作、並べ替え可能な要素の動作、およびアコーディオン メニュー、モーダル メッセージ ボックスなどのいくつかのウィジェットなどの他のライブラリがパックされているユーザー インターフェイス コア ライブラリです。フロントエンドを構築するための API。

1スケーリングしないための建設的な理由(私が知っている)はありません。もちろん、ミリ秒ごとにリクエストでサーバーを攻撃するように設定するとサーバーがクラッシュする (多くの同時ユーザーがいる) か、ブラウザーがクラッシュする (接続を開く無限ループで)、またはその両方が発生する可能性がありますが、どちらの場合も悪いことです。職人技

2 開いているソケットを保持しないでください

3 はい

4 IE6 を含むすべてのブラウザで問題なく動作しますが、一部のブラウザ (IE6 など) では、大量の JavaScript コード (およびメモリ リーク) が原因で、大幅な速度低下が発生する場合があります。

5 IE6

6

  • ブラウザーを長時間開いていると、ピーナッツ バターのようにメモリを消費します。
  • JSON はあなたの味方です - フロントエンド ロジックを念頭に置いてアプリを構築してください。ネットワーク経由で送信される HTML を使用してアプリを構築しないでください。複雑になるためです (AJAX 経由で受信したすべての新しいオブジェクトにイベント ハンドラーを再バインドする必要があります。書式設定へのアクセスはほとんどありません)。受信したばかりの HTML の大きなブログなどに);
  • データを JSON として取得し、Mustache.js などのフロントエンド テンプレート エンジンを使用して、JSON を使用してデータを構成します。

メモリ リークおよび/または読み込まれた未使用のコンテンツは通常、更新後にクリアされます (特に Chrome の場合)。 一方、Firefox は本当のメモリ マンチャーであり、アクティビティがなくても 6 ~ 12 時間開いていると、メモリの増加が見られます。メモリ使用量。

于 2012-08-10T07:10:54.270 に答える
0

ブラウザーの考古学の専門家でなくても、適切な Ajax をサポートしていない古いブラウザーの回避策としてのコメットの記憶は間違っていると思います。コメットはエキゾチックな特殊なケースであり、スケーリングが不十分であることが多いということは正しいです。ただし、現在も使用されているブラウザーでの Ajax サポートについては心配しません。解決済みの問題であるはずです。

于 2012-08-10T07:32:59.900 に答える