实际性能和表面性能
日期:2008-03-05 | 作者: Allen[原文]Actual Performance, Perceived Performance Jeff Atwood
如果你用过Windows Vista,你也许注意到过Vista中对于文件拷贝的性能要远远落后于Windows XP。具有讽刺意义的是:Vista的文件拷贝是基于改良过的算法并且实际性能要好于XP(via)。但是,咋就那么慢捏?
先让我们看一篇Mark Russinovich写的文章,他对Vista的文件拷贝算法进行了全面的、深入的分析。(via)
也许Vista“新的文件拷贝算法”中最大的不足之处,并且遭到很多Vista使用者抱怨的是:当你拷贝大量的、大小在256KB和几MB之间的文件时,表现出来的性能远不及Windows XP。那是因为之前的算法使用了缓存,也就是说当你看到进度完成的时候,实际上文件还没有拷贝完成,一部分的文件还在缓存当中,只是看上去完成了,等你做一些其他的事情的时候,系统再默默的从缓存中读取需要拷贝的文件,来完成拷贝。Vista采用不缓存的算法,资源管理器就必须等到文件完全的拷贝到硬盘上才显示完成。在Vista中,资源管理器需要用12秒的时间来估算拷贝文件所需的时间,并且估算得到的时间会经常变动(通常是时间变长),这两点都让用户感到拷贝文件非常慢。
就像Mark说的,文件拷贝没有看上去那么简单。如同生活中的很多东西,感觉才是真实的:如果用户看到文件拷贝很慢,它就是很慢。尽管改进了算法、更准确的文件拷贝的剩余时间的显示,但是Vista的文件拷贝性能仍然低于Windows XP。
表面上的性能要比实际的性能重要。高级的算法不会帮助你加快进度条。如同《重新思考进度条》中提到的,我们要理解客户真正的想法。
人们对于时间流逝的感觉不是线性的。这种感觉就决定了进度条的变化是不规则的,导致了人们感觉进度条总是一顿一顿的。进度的忽快忽慢,可以让进度条看上去更快,尽管实际的剩余时间是没有改变的。
这篇文章(pdf)用了8中进度的行为模式,并且记录了用户不同的操作。
然而在测试中所有的进度条用了相同的时间,2个特点让用户感觉到进度条是快的,即使它不是:
- 进度平滑的完成。
- 进度最后加速完成。
回想一下,Vista的文件拷贝设计失败的原因就很明显了,Vista需要SP1。以下是在Vista中感觉拷贝文件慢的原理:
- 资源浏览器在给出拷贝用时之前需要等待12秒,这无疑导致了进度不流畅的感觉。
- 进度条直到后台进程将数据写到硬盘上后才消失,这也就意味着拷贝最后会是最慢的。
性能很大一部分有用户的感觉决定,而不是实际的时间。就像变魔术一样,你看上去真的改变了性能。但是仍然会有挫败感。即使你用的技术正确,让硬性的基准数据支持你,人们微妙的感觉仍然会让你的工作付之东流,好像倒霉的Vista开发人员一样。(via)
不要犯Vista开发队伍的错误。多考虑全局而不是仅仅只靠基准。还要考虑用户对于进度的感觉。另外我推荐Tog的《最大的利用人的绩效》一文。