首页 > 代码库 > 闲话进度条
闲话进度条
对于程序员来说,进度条(progress bar)大家都很熟悉,进度条有不同的展现形式,包括传统的横向进度条以及各种loading图; 也有不同的实现方法,各种黑科技黑魔法。本文探讨两个问题,第一个为什么要有进度条; 第二个,进度条实现的一点点知识。重点在前者。
为什么要有进度条,前些天在知乎日报上看到一个神吐槽:
--为什么男生追女生追着追着就放弃了?
--没有进度条提示啊
不禁想到前一段时间在阅读《暗时间》的时候,也看到了这个问题。简单来说,进度条让人心里有个预期(有盼头),让人相信总会完成。如果没有进度条,一个事情的状态只有两种结果,未完成(0),完成(1),而一般来说,未完成状态会持续很久,在这个过程中,斗志被消磨,也就让人过早的放弃了。甚至,没有进度条的话,根本不确定这件事情能否完成,这种不确定性也会让人焦虑,进度条就是安慰剂,让人相信事情正在往预期的方向进行,心情也放松了许多。
如果完成一个事情漫长且充满不确定性,那么人们往往望而却步,进度条能让人走出第一步,且越来越有信心,在完成的时候还能产生额外的快感。
有一年的时间,我租住在一个老小区,六层,没有电梯。而我又不喜欢锻炼,因此每次爬上去都很累,身体累,心也累。怎么办呢,每一层实际上由两段楼梯组成,因此从一楼到六楼实际上要走十段,于是每走一段,心里就想已经完成了十分之一,于是十分之一、五分之一、二分之一。。。我们都知道,行百里者半九十,就是说越到后面越难,但是有了进度条,居然感到没那么累了。
这里也能看到进度条的另一个作用:分散注意力,因为关注点都几种到现在走到了多少层,完成了几分之几,所以忘了抱怨,不知不觉就到了。这个在网页加载中也是非常常见,使用各种炫酷的loading图来分散大家的注意力,避免用户因为无聊叉掉网页。
之前阅读了一篇文章,《技术大牛养成指南,一篇不鸡汤的成功学实践》,文章中提到一万小时的练习确实可以成为技术牛人(当然是一万个小时的有效时间)。找到一万个小时并不是很苦难(早起、地铁、睡觉前、周末),难的是怎么坚持,道理大家都懂,但知易行难。因此,文中给出了可行的办法:将目标分阶段。比如按技术水平分解,分成
1) 0 ~ 1年:菜鸟,需要别人手把手来教
2)1 ~ 3年:初级,需要别人带你做
3)3 ~ 5年:高级,能独当一面,可以带初级技术人员了
4)5 ~ 8年:资深,能独挡多面
5)8 ~ 10年:大牛,统筹规划,高屋建瓴
首先确定自己现在位置,瞄准下一个目标,然后对于具体的技能或者领域,再设定小目标,比如作者的例子:要提到LInux水平
1)1个月:通读《UNIX环境高级编程》
2)1个月:通读《Linux系统编程》
3)2个月:通读《UNIX网络编程 卷1》
4)1个月:Linux常用命令实战:tcpdump、ps、top等
其实,这也就是进度条,将一个宏大而漫长的目标(成为技术大牛)分解成一个个可行、可衡量的目标,每完成一个小目标,也就是进度条往前推了一格,每前进一步,信心更进一层。
另外一个场景,比如玩游戏打boss,boss的血量一般都很大,需要团队协作较长一段时间才能打死。血条可以让大家知道现在Boss的一个状况,采取不同的策略。
最后回到程序员的角度,看看进度条的实现。我认为大致可以分成三种:
第一种:需要的时间是可预估的,那么采取比较真实的计算,实时更新。比如拷贝文件,下载内容等。但是太真实可能也有副作用,比如进度条的推进速度可能不一致,时慢时块,给人的感觉反而可能是卡了
第二种:需要的时间不大可能预估,或者预估不准确,那么可以伪造进度,比如按照一定的速度匀速增加。如果比实际的快,那么等待在99%。如果比实际的慢,那么最后 嗖 的一声加速完成,就像升国旗一样。
第三种:循环播放的loading图,这个在网页加载中太常见了。
闲话进度条