Finder的GUI占资源太多
每个月,我都要从Apple下载大约25个压缩文件(.gz)——这些是Mac Apple Store在25个区的销售报告,每个压缩文件就是Apple Store一个区的报告。其实我可以用Safari来解压这些文件(通过偏好设置里面的“下载之后打开安全文件”),但是我比较喜欢保留压缩文件(为什么?因为我经常下载文档,并保留原始版本。保存下载 内容的原始版本是一个好习惯。)
如果你经常解压文件,你可能熟悉Finder的这个界面,这是一次解压多个文件跳出来的窗口:
注意,严格来说,这并不是Finder。事实上是Archive Utility在处理解压。但这是苹果提供的解压服务,99%的MacOS用户都在用这个。它可以通过更多信息对话框修改,但是大多数人都不会这么做,一般都会用默认的解压方式。所以在这里为了方便引用,就直接说是Finder在解压。
这里烦人之处不光是对话框大小变来变去,解压时间也花得很长。这会让用户觉得他们有一台很慢的电脑——“它花了12秒解压25个小文档!”——事实上,慢的只是UI界面,任务的处理是非常快的。
那么如果没有GUI的话,这项解压任务可以有多快呢?幸运的是,MacOS使用的是Unix内核,我们可以使用终端测试一下。Unix解压.gz文件的命令是gzip;解压一个文件夹下所有的.gz文件的命令(保留原有文件)如下:
gzip -d -k *.gz
你会发现,解压过程几乎在瞬间完成。使用time指令,我们可以看一下这个过程到底有多快:
$ time gzip -d -k *.gz
real 0m0.013s
user 0m0.002s
sys 0m0.005s
这是24个.gz文件的解压结果,在real行显示了实际花费的时间:0.01秒。做一个对比,我用录屏软件测试了一下Finder解压这24个文件的时间,一共花了12.8秒。终端是finder的984.6倍快。
换句话说,如果解压时间是线性的。那么在Finder解压24个文件的时间里,gzip可以解压23631个文件!
你可以看这个视频,观察用Finder和Terminal解压花费的时间。
所以并不是你的电脑慢,而是GUI接口不可思议的慢。分开的进度条根本没有必要,每个文件的进度打开又消失,没有给用户有用的反馈,只是拖慢了进度。
Finder应该直接执行任务,不用给出视觉反馈(如果有异常的话再给出提示)。如果必须要给出视觉反馈的话,一个代表所有文件解压进度的进度条来显示所有任务的进度就够了,即使这样也会拖慢进度。
这是一个很好例子,很多地方都是这样,你以为你的电脑运行速度很慢,其实只是GUI慢了。鉴于我们用解压如此频繁,Apple最好解决一下这个问题。在这实现之前,你可以利用Unix的解压来节省时间。
原文:The Finder’s GUI tax can be very expensive
作者:Rob 翻译:赖信涛 责编:仲培艺
上一篇: AppleScript 快速入门
下一篇: 【数据分析】苹果公司股票数据处理