任务的进度条可能需要不确定的时间吗?

时间:2009-09-21 16:25:07

标签: user-interface progress-bar

另一个随机问题打击了我(过去5个小时我喝了9杯咖啡,很抱歉......) - 你会向用户展示什么样的进度条不知道需要多长时间,但你对“平均”时间有一个很好的了解。例如,一项通常需要大约30秒的任务,但您无法知道进度(除非它仍在进行或只是失败)。什么是最好的用户体验?:

  • 一个快进和慢速开始的进度条(可能是一个1 / x样式的渐近曲线)在平均任务时间内达到50%(日食风格指南建议这样做)。
  • 一个进度条,以缓慢的速度,以恒定的速度进展,可能达到15%的“平均时间”(IE / Firefox在最初查找域时执行此操作)
  • 一个不确定的波浪形条(macs遍布整个地方,新的Windows版本也有它)只是显示某种动作而没有暗示任何进展,微调器或某些动画只是通知用户有什么东西是继续。

如果平均时间是10分钟而不是30秒,答案会有所不同吗?

谢谢, 罗伯特

修改

为了清楚起见,问题是关于进度条,你不知道/指示需要多长时间(例如,在远程机器上执行任务)。如果你确实有一些进展的迹象,那么使用它通常是好的。

7 个答案:

答案 0 :(得分:6)

可用性研究(我找不到pdf)显示,在完全相同的持续时间内,加载具有不同模式的条形(指数,线性,logaritmig),那些“感觉更快”的条形,其中完成指数的那些。我的意思是,那些开始缓慢,但随着时间的推移变得更快。

我通常做的是:

  • 如果我知道这个过程可以花费的平均时间,可以稍微调整一下,然后放慢到最后20%-10%,然后进度条加速并赶上真正的进度,这样的时间点该过程在条形图速度最快时结束。
  • 如果我不知道可以花多长时间,我会多次测量以获得球场(秒?分钟?小时?)
    • 如果它是重复操作,运行之间差异很小,我会考虑最后的运行时间。
    • 如果是长时间运行或变化很大,我不会使用进度条,而是使用动画来表明我正在工作。

不要骗你的用户。 从不告诉他们一分钟后它将会结束半小时后仍在运行。

答案 1 :(得分:6)

我正在成为Mac和Vista风格旋转圈的忠实粉丝,它表明了进展,但没有设置误导用户的期望。

XKCD漫画
http://xkcd.com/612/

https://imgs.xkcd.com/comics/estimation.png

答案 2 :(得分:3)

绝对是理发杆的进度条。我认为这是Mac人机界面指南(HIG)的标准。我相信其他平台也存在类似的“未定义”进度条。

我还会放一个文本进度指示器(例如,传输的字节数)。 “猜测”完成百分比是可行的,但你肯定应该非常确定平均时间和标准偏差,否则你会让很多愤怒的用户生气并点击取消,因为你的一小时后进度停留在99%。这对他们和你的软件的声誉来说会非常烦人。

答案 3 :(得分:3)

进度条是否以精确恒定的速率移动并不重要。事实上,从字面上看,这肯定几乎是不可能的。您如何提前知道哪些因素可能会加速或减缓实际进展?

因此,我选择了可​​以完成的工作量和跟踪百分比完成情况的任何方便的衡量标准。如果要传输的字节数,要处理的记录数,条形码的数量,等等。所以可以肯定的是,它有时会快速启动然后减速,反之亦然。但真正重要的是,只要这个过程正在努力完成,它就会继续发展。

我认为,当你事先并不知道任何合理的工作量时,问题就在于。比如,你必须处理一组记录,但除了阅读所有记录并计算它们之外,你没有简单的方法来获取记录数,一旦你完成了这些记录,你可能只是沿着它处理它们。办法。在这些情况下,我通常采用“进度计数”来代替进度条:例如“处理1条记录”,“处理2条记录”等。至少用户可以看到它正在移动,并且在他完成之后很多时候,他可能已经知道它将走多远,即数万甚至数十万或其他什么。

我正在研究一个现在经常使用我认为相当蹩脚的方法的系统:它们只是将任意百分比附加到任何方便的检查点。就像一个函数读取一堆数据,对它进行排序,格式化并打印它们一样,它们在读取完成时会说25%,在完成排序时会说50%,格式化完成时会是75%,然后是100%时打印完成。我想它总比没有好。

答案 4 :(得分:2)

我从来没有见过它,但是进度条上的滑动窗口怎么样,这样你就可以看到工作是在进步,速度是多少,但最终还是会有所改善。对进度栏进行月球行走的排序。您需要使动画与众不同,以便用户可以判断正在添加新的blob,并且最旧的blob向左滑动。当程序确定它知道到任务结束的距离时,滑动停止。

答案 5 :(得分:2)

最好的策略是简单明了。告诉已知的事情,并设定正确的期望。

如果可以花费很长时间,最好是冗长,例如:

==============================================================================
  Executing command xyz.. 

     Started: 10:30 AM (usually requires about 20 minutes to complete)

     Status: 10:35:10 AM.. Still working...{this line needs to update frequently}

  [Send to background]    [Cancel]
==============================================================================

我在某些大型安装程序中看到了这种冗长的描述;不记得究竟在哪里,但它可能是操作系统或服务器软件。像“这项任务可能需要几分钟才能完成”这样的短语在安装人员中也并不少见。

如果任务通常需要很短的时间才能完成(例如30秒),但有时可能需要更长的时间,最好只显示任务未挂起或其他功能失调的指示,当且仅当它能够确定。即,如果你可以确定任务没有死或挂。如果您最终用户不确定该任务的进展情况,最好只显示一个后台选项(让用户在其继续时执行其他操作)或取消选项(如果任务可以被取消)。

典型示例是数据库管理控制台,允许用户在数据库上执行SQL查询。通常,查询在几秒钟内就会得到满足,但很少会出现查询需要大型笛卡尔积,创建多个临时表,等待锁被清除等等可能需要几分钟的情况。管理控制台软件无法确定查询可能需要多长时间,因为有关查询预期执行时间的所有信息只能由数据库服务器知道。在这种情况下:

  1. 无法确定需要多长时间。

  2. 也无法确定数据库服务器是否陷入死锁或挂起

  3. 最糟糕的是,您无法取消查询执行。

  4. 在这种情况下,唯一的好处就是让用户“背景”完成任务。

答案 6 :(得分:1)

为什么不在方法中完成任务时增加进度条?

任务或过程花费多长时间是无关紧要的,当任务的Y部分完成时,可以简单地将进度条的值增加X量,或者你是进入过程的Z. (即每100千字节文件上传处理的每5千字节)