Я недавно написал служебную программу под названием WindowTiler , которая перемещается по текущему фокусированному окну с помощью глобальных ярлыков.Я перемещаюсь по окну через AppleScript и использую следующий скрипт, чтобы получить границы сфокусированного окна :
tell application "System Events"
set appName to the first process whose frontmost is true
set appWindow to the value of attribute "AXFocusedWindow" of appName
set {w, h} to the size of appWindow
set {x, y} to the position of appWindow
set appBounds to {x, y, x + w, y + h}
end tell
{bounds:appBounds}
Со временем я понял, что мое приложение реагирует медленно, если нетиспользуется в какое-то время .После интенсивного измерения времени я обнаружил, что причиной медленного ответа является вторая строка показанного AppleScript.Иногда для выполнения сценария требовалась целая секунда (на SSD, насколько я знаю, на жестких дисках еще хуже).
Я не знаю, почему AppleScript так долго нужен, чтобы просто найти самый передний процесс -должен быть единственным запросом к менеджеру процессов.Может быть, вы знаете, почему он такой медленный и / или может подсказать мне, как сделать скрипт быстрее.
PS: я настроил Xcode для предварительной компиляции моих сценариев AppleScripts, когда создаю свое приложение («Архив»).Скомпилированные скрипты доступны только для чтения.