私は、AJAX を介して 2 つの個別のチェックを実行する必要がある JavaScript アプリケーションに取り組んでいます。各チェックの結果によって、動作が異なります。ここで興味深いのは、両方のチェックが成功した場合です。これを行うためのいくつかの方法を特定しました。SO から、最良のアプローチと思われる方法についてフィードバックをもらいたいと考えています。
- 同期 AJAX 呼び出し: これは私が継承したものであり、なくなりました。ブラウザーとシステムのロックアップを引き起こしますが、単一の実行スレッドで応答の処理を維持することはできます。
- デイジーチェーン: AJAX 呼び出しを行って最初のチェックを実行し、それが成功した場合は、最初のチェックのコールバックで 2 番目のチェックを実行します。2 番目のチェックを処理し、合格した場合は成功です。これは最も簡単な解決策ですが、2 つのチェックが不必要に結合されているように見えます。また、チェックをシリアル化する必要がなく、パフォーマンスが低下するように感じます。
- カスタム イベント: YUI のイベントモジュールとカスタム イベント ユーティリティを使用して、両方の AJAX 呼び出しを同時に開始します。成功事例ごとにカスタム イベントを作成し、AJAX 応答を処理するコールバックに、成功のチェックごとに適切なイベントをスローさせます。その後、各イベントのハンドラーは他のイベントをサブスクライブできます。それがスローされた場合は、正常に完了しています。
私の質問は、私が好む 3 番目のアプローチに関するものです。ハンドラーがスローされるイベントを介してのみ接続され、AJAX 呼び出しが同時に発生できるという事実が気に入っています。私が知りたいのは、他の誰かがこのモジュールをこのように使用したことがありますか? どのような落とし穴が予想できますか? 競合状態に陥ってしまったのではないかと心配しています。これを軽減するにはどうすればよいですか? 最後に、ここまで読んだ方へ、もっと良い方法はありますか? 私のリストはすべてを網羅しているわけではありませんか、それとも設計に根本的な欠陥がありますか? 建設的な批判とコメントは大歓迎です。
編集:サーバーリクエストはセッションを使用しますが、それらは互いに無関係であり、セッションデータを書き込まないため、サーバー上で並行して発生しない理由はありません(PHPセッションにいくつかの制限がない限り)約)。サーバー側のチェックも行っていますが、特定の重要なイベントの前に、直前にサーバーに確認する必要があることがわかりました。これにより、まれに何かが変化したことをユーザーに通知できるようになります。