'做Shell脚本'和过早优化

在上周之后关于如何编写动态定位Safari或WebKit的AppleScripts,一些读者询问了以下子程序,该子程序返回默认Web浏览器的名称:

on GetDefaultWebBrowser()
    set _scpt to "export VERSIONER_PERL_PREFER_32_BIT=yes; " & ¬
        "perl -MMac::InternetConfig -le " & ¬
        "'print +(GetICHelper \"http\")[1]'"
    return do shell script _scpt
end GetDefaultWebBrowser

The question, more or less, is why call out to the shell to use Perl rather than figuring out a way to do it in pure AppleScript? It costs memory and time to call out to the shell and launch an instance of the Perl interpreter.

我的答案是这个Perl例程足够快,当脚本完成后,Perl解释器使用的内存被释放我写了一个简单的脚本,除了一次调用这个例程之外别无他法。脚本调试器报告说它通常需要不到0.1秒的时间来运行如果这是我反复呼叫的东西,在紧密的循环中成百上千次,当然,我会考虑编写最快的版本但我只称这个例程一次Perl以及片段用于获取“http”URL方案的默认处理程序的Mac :: InternetConfig库默认情况下随Mac OS X一起安装。

这让我感到非常完美唐纳德克努特的着名公理:“我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源。”有很多案例,在AppleScript中做最简单的解决方案是使用做shell脚本从shell脚本语言中做到这一点我认为这是AppleScript发生过的最好的事情。