web-dev-qa-db-ja.com

成功すると仮定して、すぐに応答を表示するか、サーバーからの応答を待ちますか?

CMSの至る所に、ajaxリクエストを送信してデータベースを更新し、成功するとボタンの状態と値を変更することで、何かをオンまたはオフに切り替えるボタンがあります。非常に基本的な「ajax」と「toggle」。記事の公開、ユーザーの無効化、投票の終了など、何でもかまいません。

実際のサーバーの応答時間はかなり高速ですが、瞬時ではありません。最初はボタンの内側に進行状況インジケーターを表示しましたが、クリックして別のボタンに移動したい場合に反応が遅くなることがあります。リクエストが保留されている間の短い時間。リクエストが失敗した場合(決してすべきではありません)、ボタンをエラー状態に変更して完全に無効にします。通常、ボタンは繰り返しクリックされるのではなく、1回クリックされるため、「中間」の時間には関係ありません。

これはインターフェースの感じ方に大きなプラスの違いをもたらしますが、私にはいくつかの懸念があります:

  • なんらかの理由でそこにエラーが発生した場合、誰かがコントロールパネルをすばやく移動しても、エラーが表示されないことがあります。
  • リクエストが保留されている0.5秒間にユーザーが新しいページに移動すると、どうなりますか?
  • これは本当に悪い考えですか?常にサーバーの応答を待つ必要がありますか?
  • 感触を改善したり、知覚される応答時間を短縮したりするには、他に何ができますか?
9
Wesley Murch
  • なんらかの理由でエラーが発生した場合、誰かがコントロールパネルをすばやく移動しても、エラーが表示されないことがあります。

それを解決するには、ウェブサイトでse framesを使用して、一定の親フレームと「トップバー」があるようにします。これは、通信喪失のインジケータの場所になる可能性があります。 AJAXサーバーへのアクセスは、その親フレームを経由して行うことができます。この組み合わせはサイト内の迅速なページ変更を処理でき、子ページからの問題を通知します去ったばかりです.

サイトから移動するの場合、未確認の変更が保留されていることを警告するために、親のページunload()イベントをキャッチします。

関連付けられる通信障害メッセージの目に見える上部バーは必須ではありません。この手法では、好きなスタイルの通知を使用してください。必要に応じて、自分のどのページにでもメッセージをポップアップできます。

  • リクエストが保留されている0.5秒間にユーザーが新しいページに移動すると、どうなりますか?

AJAXリクエストは親フレームで発生します。問題ありません。

  • これは本当に悪い考えですか?

それはです良いアイデアです。とても良い考えです。ユーザーはレスポンシブページが好きです。 GMailはサーバーからの確認よりもかなり前に状態を変更します。グーグルはまた、何が起こっているかを示すメッセージを画面上の固定位置に配置しました。私には、一部の開発者のデバッグからの残りのように見えますが、私はそれが好きです

  • 常にサーバーの応答を待つ必要がありますか?

待つ必要はありませんが、依存アクションに注意する必要があります。以前の不完全なアクションの一部が、予測できないサーバーからのコンテンツに基づいて使用可能なオプションを変更する場合、その時点で、サーバーで待機する必要があることをユーザーに通知する必要があります。

  • 感触を改善したり、知覚される応答時間を短縮したりするには、他に何ができますか?

一部のリフトのスケジューリングアルゴリズムを知覚される待機時間を改善するに改善するようにソフトウェアエンジニアが要求されたという話があります。誰かがリフトの近くに鏡を置くという明るい考えを抱くまで、彼らは進歩しませんでした。人々はリフトを待つ間、時間をかけて自分を修復し、リフトがはるかに早く到着するのを感じました。

これから派生しているように見えるアドバイスは、ユーザーが待っている間にユーザーに役立つ何かを与えることです。たとえば、プログレッシブ開示、データに依存する指示の開示を使用します。

非常に遅延したサーバーを使用している場合は、サーバーとの通信が行われるまでの時間を確保するために、いくつかの遷移をアニメーション化する方法があります。レスポンシブサーバーと、インターフェースを頻繁に使用するユーザーがいるため、サイトに適しているとは思えません。ノベルティはすぐに薄くなります。

8
James Crook

私はこのアプローチを取るでしょう:

  • 状態変化をすぐに表示

  • リクエストがサーバーで保留されている間に、ある種の進行状況インジケーターを表示します(あまり気を散らすことなく-小さな回転ディスクなど)

  • リクエストが正常に完了したら、進行状況インジケーターをオフにします

  • リクエストが失敗した場合(サーバーによって拒否されたか、タイムアウトした場合)、状態をロールバックし、ポップアップエラーメッセージを表示します

2
Tony the Pony

それはあなたには速く感じるかもしれませんが、彼女の編集者が彼女に電話し、彼女がホームページのプレスリリースを更新し、彼女が2バー接続で彼女のiPhoneをそこに座っていると主張するとき、休暇中にジャマイカにいるその人に速く感じるでしょうか? ;)

私の要点は、あなたが制御できない巨大な変数、つまりネットワークがあるということです。したがって、典型的な「応答を待っている間に表示処理を実行してから、成功または失敗で更新する」ことはおそらく安全です。

2
DA01