web-dev-qa-db-ja.com

AJAXは多すぎますか?

私の現在のプロジェクトは高度にリンクされたアーキテクチャの一部であり、個々のシステムがそれぞれ特定のデータを所有し、それらをRESTfulに公開しています。 Webサービスとユーザーインターフェイスの両方がこのリンケージを利用して、データのコピーを保存するのではなく、他のシステムのリソースへのリンクを保存し、それらのリソースの現在の状態をフェッチすることによって複合ビューを表示します。

たとえば、私のシステムは年鑑に責任があるかもしれません(もちろん、ここでは実際のデータと関係を使用していません)。人々は別のシステムに所有されており、おそらく連絡先情報(メールアドレス、電話番号、Twitterハンドルなど)を持っています。その連絡先情報は、電話番号または電子メールアドレスに関する詳細を含む別のシステムに保存されている場合があります。

ユーザーインターフェイスにビューを表示するには、自分のデータをフェッチし、リンクをたどって、これらの他のシステムから適切な詳細を表示する必要があります。この情報の特定の部分をキャッシュすることもできますが、最新の詳細を取得したい場合があります。

一部のページでは、この種のデータエンリッチメントを実行するための検索の数がかなり少なくなっています。他のページでは、より多くの情報を提示し、リストを取得したり、各要素を展開したり、各要素を展開したりして、データが急増します。この集約を行い、ビューが必要とするすべてのデータを単一の応答で返すサービスを提供することを試みました。ただし、これがこれを提供する最もクリーンな方法であるかどうかはわかりません。

このデータをフェッチするためにAJAXリクエストを直接使用するタイミングを決定するための戦略を誰かが提案できますか?データを構築するために、どの時点で個々のリクエストから集約サービスの提供に切り替える必要がありますか?またはいくつかありますか?私が適用できる他のテクニック?

5
CPhelps

実行する必要があるAjaxリクエストの数と、いつ実行するかは、実際にはUIに依存すると思います。私が最初に考えるのは、ロードしているデータに関連する最も重要な情報は何ですか。たとえば、個人の場合、彼の名、姓、誕生日は、表示したいものです(または Wikipediaの右側のフレームに表示される種類の情報)個人情報を表示するため )。重要な情報をできるだけ早く表示する必要があると思いますが、重要なものとそうでないものを決定するのはあなた(またはクライアント)の責任です。

次に、Ajaxリクエストを使用して、たとえば "tab"のように、最初は利用できないか、ユーザーに非表示になっている詳細情報(アドレス?電話番号?Twitterハンドル)をロードできます。 選択されていません。デフォルトで選択されているタブは、主要な情報が含まれているタブです。それを行うには、2つの方法があります。

  • ページが ready のときに、つまり、ユーザーに表示されたときにロードします。これは、ユーザーが主要な情報を見ている間に読み込まれます。
  • ユーザーがタブをクリックしたときにロードします。ユーザーは少し待たなければならないでしょう(非常に速く、ユーザーにはほとんど知られていない可能性があります)。

どちらの方法でも、一貫性を採用し、データがまだ利用できない場合は、必ず有名な「読み込み中アイコン」が表示されるようにしてください。 2番目の選択肢は適切ではないかもしれませんが、時間がかかり、大量のデータを返し、他に何よりも複雑なウィジェットを表示する必要があるAjaxリクエストには役立ちます。また、不要なAjax呼び出しを回避します。

実行するAjaxリクエストの数(書いたサービス集約は、サーバー側でデータを集約することを意味します)は、必要なデータを取得するのにかかる合計時間ほど重要ではないと私は考えています。 1つの大きなリクエストで情報をより速く表示する場合は、それを実行します。そうでない場合は、いくつかの小さなリクエスト/応答を使用します。できるだけ早くページをロードするという目標を設定して、それを達成するようにしてください。

とにかく、何を試してユーザーに最高のエクスペリエンスを提供するかを確認する必要があります。私はそれが素晴らしいアドバイスではないことを知っていますが、それは私がやろうとしていることです。

3
Jalayn

ASP .NET Webフォームと分離コードに精通している開発者は、分離コードをjavasctiptとAjaxに置き換えるだけです。Ajaxオンクリックを最小のユーザーコントロールの背後に配置する傾向があります。これは実質的にサーバーコントロールのイベントハンドラーです。

Ajax呼び出しを行うことの結果が何であるかを理解する必要があります。たとえば、呼び出しがWCF/EJBへの呼び出しとデータストアへの呼び出しになる場合、その呼び出しは4つのプロセッサ境界(ブラウザー、Webサーバー、アプリケーション層、DB)にまたがります。これらの呼び出しは、呼び出しの準備とデータのマーシャリングに伴うレイテンシの点で高価です。

Martin Fowlers Service Facadeによれば、Ajaxは実際にはアンチパターンであるきめ細かいリモート処理を促進しています。何でもそうですが、Ajaxは適度で適切な場所にあります。その場所は商用ソフトウェアにあるとは思いません。

2
SteveK

答えは「場合によります」です。

  • あなたのajaxリクエストは同時に処理されますか、それともシリアル化されますか?シリアル化は、クライアント側(ロジックまたはブラウザーの接続制限)またはサーバー側で発生します(例:PHPセッションを使用する場合、セッションデータの同時実行の問題を防ぐために要求をシリアル化します)。
  • サーバーへの往復時間の典型的なケースと最悪のケースは何ですか?

典型的な往復時間が1秒である状況は知っています。そのような状況では、サーバーが1ミリ秒で応答した場合でも各要求に1秒かかるため、シリアル化される場合はmust要求を集約します。一方、リクエストの同時性が高い場合、誰が気にかけますか?

1
Joeri Sebrechts

現在、ExtJSフレームワークを使用するアプリケーションに取り組んでおり、どこにもAJAXがあります。アプリケーションのモジュールを起動してレポートをロードすると、最大30のAJAXリクエストが発生します。

AJAXがソフトウェア開発の通常の部分であるという考えに慣れたら、カウントを停止するだけです。 AJAXは、制限または回避する必要があるものではありません。

1つのAJAX呼び出しの出力を処理するときに、他の出力に依存しているときに競合状態が発生しないことを確認してください。

1
user281377