首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何减少开销并更快地运行applescripts?

如何减少开销并更快地运行applescripts?
EN

Stack Overflow用户
提问于 2022-01-10 02:15:53
回答 1查看 134关注 0票数 0

我正在开发一个应用程序,它可能需要按顺序运行许多applescripts,并且我正在寻找任何方法来更快地运行applescripts。我说的不是内部结构,而是执行启动/清理。

示例:

onePlusOne.applescript:

代码语言:javascript
复制
1+1

然后我用osacompile -o onePlusOne.scpt onePlusOne.applescript编译了这个

现在,测试(在bash shell中):

time zsh -c "(( val = 1 + 1 ))"

代码语言:javascript
复制
real    0m0.013s
user    0m0.004s
sys 0m0.007s

time osascript onePlusOne.scpt

代码语言:javascript
复制
real    0m0.054s
user    0m0.026s
sys 0m0.022s

我想知道是否可以对额外的开销做些什么,以便更快地执行applescripts。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-10 07:53:20

你不会说什么类型的应用程序,什么类型的AppleScripts,或者脚本是应用程序的一部分,还是用户提供的。您也不需要说明您是否已经构建了一个原型并发现了实际的性能问题,或者此时您正在谈论纯粹的假设

假设一个典型的沙箱化Swift/ObjC桌面应用程序:

  • 对于任意用户提供的AppleScripts,您通常希望使用NSUserAppleScriptTask,因为它在应用程序的沙箱之外运行脚本。一个很大的限制是:它的子进程不是持久的,所以您不能加载一个脚本并多次调用它的处理程序;每次都必须创建一个新的子进程,如果您想在调用之间保留脚本的状态,那么您必须自己安排一些事情。
  • 上述情况例外:如果用户提供的脚本可以在应用程序的沙箱限制内运行,那么通过NSAppleScript/OSAScript运行脚本是一种选择,这些脚本允许您加载一次脚本并多次调用它。
  • 对于内置的AppleScripts,使用AppleScript-ObjC桥将脚本公开为ObjC子类和直接调用他们的处理程序。那里的间接费用大多是过桥所需的时间。

否则,间接费用就是间接费用,通常你对它们无能为力。TBH,您的普通AppleScript将花费更多的时间等待IO (AppleScript功能强大但速度慢)或遍历病理算法(例如,迭代列表通常是O(n²),因为AS的内部结构很糟糕,而且大多数AppleScripters都是业余的,因此会编写效率低下的代码)。可能有一些方法可以改善糟糕的运行时性能,但这是一个更大的讨论。

最后一个考虑:基于AppleScript的自动化,“它快速吗?”是不是比“用手完成同样的任务更快”更重要?即使是一个慢速的AppleScript也会比一个快速的人快10-100倍。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70647124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档