優れたユーザーエクスペリエンスとは何ですか?起動時に一度待機するか、頻繁に待機するか?[閉まっている]


8

現在、多くの計算を必要とするアプリケーションを設計しています。今私は一般的に私が両方をテストした2つの可能性を持っています:

1)アプリケーションの起動時に、最も重要な値と多くの時間を消費するこれらの値のみを計算しました。したがって、ユーザーは起動時に約15秒待機する必要があります。しかしその一方で、多くのユーザーインタラクションは再計算を必要とするため、アプリケーションがすべての値を計算してロードするまで、ユーザーはどこかをクリックしてから2〜3秒待たなければならないことがよくあります。

2)起動時にすべてをロードします。これには90〜120秒かかります...これはかなり長い時間ですが、大きな利点は、すべてのユーザー操作がすぐに実行されることです。

では、一般的に、より良いアプローチをどのように考えますか?起動時または必要なときにすべての時間のかかる操作をロードしますか?


1
何を計算していますか?この計算は最適ですか?
dbasnett

@dbasnettの計算は最適な単語ではない可能性があります...データベースクエリ、サウンドとグラフィックスの読み込み、数百のHTTPリクエストなどの混合に似ています...そして最適です... 100だとは思いません%最適ですが、本当に大きな障害はありません
RoflcoptrException

回答:


20

できるだけ早く起動し、スレッドを使用して最も重要な計算を行います。したがって、ユーザーはすぐにフィードバックを受け取り、15秒後に作業を開始できます。バックグラウンドで、別のスレッドがすべてを計算するようにします。2分後に、これらの2〜3秒の応答時間もなくなります。


2
可能な場合は高額なリクエストを予測するか、少なくとも優雅なフィードバックを提供することで、スタートアップを高速化するのがよいでしょう。
FilipDupanović11年

また、バックグラウンドタスクがこれらの2分間に計算を行っていることをユーザーに何らかの形で通知します。
TheLQ、2011

@TheLQ:そうです、ステータスバーはこのタスクに置くことができます。
Matthieu M.

もちろん、その作業がバックグラウンドで同時に行われている限り、スレッドは技術的に必要ありません。プログラミング言語/環境が提供するものすべて。
Waquo、2011

@Waquo:好奇心から、別のスレッドを使用していない場合、バックグラウンドでどのように作業が行われますか?
Wonko the Sane

6

GUIとは別のスレッドを使用して、必要な計算を行います。フォームにイベントをサブスクライブさせ、イベントの計算が完了したら、それに応じてフォームが機能するようにします。

GUIをロックしないでください。これはエンドユーザーにとって非常に迷惑であり、貧弱な製品の兆候と見なすことができます。

あなたのケースでは、できるだけ速くユーザーに何かを表示し、バックグラウンドですべての計算を行います。


1
それは元のポスターが求めていることではありません。
Mavrik、2011

@Mavarik:私の回答を少しわかりやすくするために編集しました。

4

UIスレッドを絶対にロックしないでください。やむを得ない状況でユーザーを待たせたい場合はフィードバックをお寄せください。

彼らがアプリケーションを使用するたびに確実に、そのデータのすべてを完全に利用することが確実である場合を除いて、アプリケーションの何かの「全体」を計算またはフェッチしないでください。

また、データの揮発性にも依存します。変化がほとんどない場合、アプリケーションが起動するたびに再計算する必要があるのはなぜですか?アプリケーションの起動について重要なことは何もないと私は確信しているので、データの基になる値が変更されたときにのみ、計算をキャッシュして更新できますか?

アプリケーションのロードを1〜2分待つことは、ほとんどの状況では問題外です。前に言ったように、すべてのデータはアプリケーションのすべての機能で利用できる必要がありますか?

必要なときに必要なだけデータ計算を行うことで、可能な限り応答性を維持します。常にグローバルに必要なデータである場合は、バックグラウンドスレッドで計算を行います。遅延読み込み/計算されるデータの一部を検討してください。

私たちは、基礎となるデータの性質やアプリケーションのユースケースを知らないので、あなたが述べたことが私たちがあなたに正確な答えを与えるのに役立つとは思いません。


2

あなたはあなたのアプリケーションが何であるのか、そしてなぜ何かを計算する必要があるのか​​についてあまり説明していません。そのため、正確に答えることは困難です。すべてのケースで、ユーザーに15秒待つか90秒待つかを選択できると言います。どちらの場合も問題があります。非常に特殊な状況を除いて、使用したすべてのアプリケーションは10秒未満でロードされました(たとえば、Visual Studioは、クリーンインストール後の最初のロード時に最大30〜40秒かかる場合があります)。

一般に、ユーザーは起動時やワークフロー中に待機する必要はありません。アプリの起動に15秒かかる場合、ほとんどのユーザーはアプリを閉じないようにするか、コーヒーを飲むときにアプリを起動しようとします。すべての場合において、彼らはおそらく「貴重な時間を失うのではなく、正しいソフトウェアを購入するためにもっと投資すべきだ」と考えます。

すぐに大量の計算が本当に必要になるケースは非常にまれで、簡単に取り除くことができます。たとえば、Adobe Lightroomは、起動時に、写真のサムネイルを含む最後のカタログを表示する必要があります。数百枚の写真1枚のディスクに20 MBの写真を含むカタログから始めると、それらの写真の読み込み、読み取り、変換(遠近法による歪みなどを含む)、およびサムネイルの生成には、多くのハードディスクとCPUが必要です。 。実際、Lightroomはそれほど新しいPCにロードするのに5秒もかかりません。データがインテリジェントにキャッシュされ、起動直後に数百のサムネイルすべてが表示されるわけではなく、メインウィンドウで1つずつ表示されるためです。はすでに表示されています。

したがって、あなたのケースでは、おそらくユーザーが待たなければならないタイミングについては考えず、ユーザーが時間を無駄にしないようにする方法について考えるべきです。


編集:もちろん、動作が異なるアプリケーションのグループ、つまりビデオゲームを忘れてしまいました。ビデオゲームでは、ユーザーがグラフィックをロードするのに1分間待つことができます。これが行われるのは、2D / 3DレンダリングはCPUに負荷がかかる可能性があり、ゲーム中にマシンのリソースをロードおよび計算することを無駄にする余裕がないためです。ビジュアルパフォーマンスは可能な限り最高でなければならず、ゲーム体験は非常にスムーズでなければなりません。

しかし、この場合でも、これらのアプリケーションは1分未満でデータをロードしようとしていると思います。または、小さなチャンクロードして、ユーザーがゲームを非常に速く開始し、スムーズにプレイできるようにしますが、あるレベルから別のレベルに進むときは5秒まで待機します(これは、たとえばHalf Lifeシリーズで見たものです)。


1

計算に必要なこれらの値はどのように使用するのですか?単に表示しますか?

あなたはそれらを一度に計算できると言いました、それらをどこかに保存してそれらを再計算する必要がないようにすることはできませんか?

これがオプションでない場合は、マルチスレッドを使用して、値を表示する場所に「計算中」のアニメーションを表示することを選択します。値が計算されると、それらを表示できます。

この方法では、GUIがロックしないため、非常に迷惑です。ユーザーは、中止して別の画面に移動することなどを選択できます...


1

必要に応じて計算してから、再度計算する必要がないように保存することはできませんか?

したがって、数値が必要な場合は、それが格納されているかどうかを確認し、そうでない場合は計算して格納します。


1

知覚はほとんど現実です。順番待ちは、実際にサービスを提供しているときよりもはるかに長くかかるようです。最初にロードするのに時間がかかりすぎなければならない場合、アプリケーションが遅い(そして常にすべての動作が遅い)という考え方を開発するのは人間の本性です。

可能であれば、計算を中断します。理想的には、それらの多くはバックグラウンドで実行されるか、必要に応じて実行されます。


1

これらが私の2つの唯一の選択肢である場合、私は遅い起動時間を取ります。何かが始まるのを少し待ってもかまいませんが、いくつかの作業を実行しようとしているときにシステムが遅れると、それが嫌になります。

もちろん、どのタイプの待機も良いユーザーエクスペリエンスではありません。他の回答者も、マルチスレッドを調査する必要があることに同意します。明らかに、アプリがほぼ完成している場合は、マルチスレッドを簡単に「アドオン」することができないので、次のバージョンを検討することになるでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.