代码之家  ›  专栏  ›  技术社区  ›  Robert Fraser

需要不确定时间的任务的进度条?[闭门]

  •  5
  • Robert Fraser  · 技术社区  · 17 年前

    • 一个进度条,一开始速度快,一开始速度慢(可能进度是1/x式的渐进曲线),在平均任务时间内达到50%(eclipse式指南建议这样做)。
    • 一个进度条,进度缓慢,速度恒定,可能达到15%左右的“平均时间”(IE/Firefox在最初查找域时会这样做)

    谢谢 罗伯特

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

    7 回复  |  直到 8 年前
        1
  •  7
  •   Community Mohan Dere    9 年前

    我正在变成Mac和Vista风格的旋转圈的超级粉丝,它在不设定误导用户期望的情况下显示了进步。

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

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

        2
  •  6
  •   Esteban Küber    17 年前

    我通常做的是:

    • 如果我知道这个过程所需的平均时间,再向前移动一点,然后放慢速度直到最后20%-10%,那么进度条就会加速并赶上真正的进度,这样的时间安排使得这个过程在进度条速度最快的时候结束。
      • 如果这是一个重复性操作,每次运行之间变化很小,我会考虑最后一次运行的时间。

    不要对你的用户撒谎。 从未 告诉他们它将在一分钟半小时后结束,但它仍在运行。

        3
  •  3
  •   Stefano Borini    17 年前

    我还将放置一个文本进度指示器(例如,像传输的字节数)。“猜测”完成百分比是可行的,但你肯定应该是 非常

        4
  •  3
  •   Jay    17 年前

    因此,我选择任何方便的方法来衡量需要完成的工作量,并跟踪完成的百分比。如果这是要传输的字节数,要处理的记录数,要处理的foo数,等等。所以当然,有时候它开始的时候很快,然后变慢,反之亦然。但真正重要的是,只要这个过程朝着完成的方向努力,它就会继续前进。

    我认为困难的问题在于你事先不知道要做多少工作。比如,您必须处理一组记录,但是除了读取所有记录并对其进行计数之外,您没有简单的方法来获取记录计数。一旦您这样做了,您还不如一路处理它们。在这些情况下,我通常不显示进度条,而是显示“进度计数”:如“1条记录已处理”、“2条记录已处理”等。至少用户可以看到它在移动,在他做了几次之后,他可能大致知道它要走多远,也就是说,它是数万对几十万或者其他什么。

    我现在正在开发一个系统,它通常使用一种我觉得很蹩脚的方法:它们只是将完全任意的百分比附加到任何方便的检查点上。比如,如果一个函数读取一组数据,对其进行排序、格式化并打印,那么当读取完成时,它们会说25%,排序完成时会说50%,格式化完成时会说75%,打印完成时会说100%。我想总比什么都没有好。

        5
  •  2
  •   Martin    17 年前

    我从来没有见过,但是在进度条上滑动一个窗口怎么样,这样你就可以看到工作是否在进行,以什么速度进行,但是终点一直离得更远。有点像在月球上行走的进度条。您需要使动画与众不同,这样用户就可以知道正在添加新的斑点,而最老的斑点正在向左滑动。当程序确定它知道到任务结束的距离时,滑动停止。

        6
  •  2
  •   user176706 user176706    17 年前

    可以 要花很长时间,最好是长篇大论,例如:

    ==============================================================================
      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秒),但有时可能需要更长的时间,那么最好只显示一个指示器,表明任务没有挂起或其他功能异常,如果并且只有在能够确定的情况下。i、 例如,如果你 可以 确保任务没有停止或挂起。如果您和最终用户一样不确定任务的进展情况,那么最好只显示一个后台选项(让用户在继续执行任务时执行其他操作),或者显示一个取消选项(如果可以取消任务)。

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

    1. 也无法确定数据库服务器是否在死锁中卡住或挂起

    2. 最糟糕的是,您不能取消查询执行。

    在这种情况下,唯一的好处是让用户“后台”完成任务。

        7
  •  1
  •   Daniel May    17 年前

    任务或流程所需的时间无关紧要,当任务的Y部分完成时,或者您已经深入到流程中,可以简单地将progressbar的值增加X个数量。(即在100 KB文件上传中每处理5 KB)