欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Finder的GUI占资源太多

程序员文章站 2024-03-20 19:56:40
...

每个月,我都要从Apple下载大约25个压缩文件(.gz)——这些是Mac Apple Store在25个区的销售报告,每个压缩文件就是Apple Store一个区的报告。其实我可以用Safari来解压这些文件(通过偏好设置里面的“下载之后打开安全文件”),但是我比较喜欢保留压缩文件(为什么?因为我经常下载文档,并保留原始版本。保存下载 内容的原始版本是一个好习惯。)

如果你经常解压文件,你可能熟悉Finder的这个界面,这是一次解压多个文件跳出来的窗口:

Finder的GUI占资源太多

注意,严格来说,这并不是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 翻译:赖信涛 责编:仲培艺

相关标签: Finder GUI Apple