Почему для извлечения переднего процесса через AppleScript требуется так много времени? - PullRequest
3 голосов
/ 30 июля 2011

Я недавно написал служебную программу под названием 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, когда создаю свое приложение («Архив»).Скомпилированные скрипты доступны только для чтения.

1 Ответ

0 голосов
/ 31 июля 2011

Я не видел такого лага в получении углеродных горячих клавиш для событий.Вы добавили запись в код, чтобы увидеть, когда вызывается обратный вызов горячей клавиши?Это на самом деле занимает несколько секунд, или вы, возможно, занимает несколько секунд, чтобы обработать его?

Взгляните на DDHotKey для примера того, как сделать это хорошо (или вы можете просто захотетьиспользовать код Дейва вместо вашего).

РЕДАКТИРОВАТЬ

Если у вас возникли проблемы после запуска программы некоторое время, вы также можетехочу запустить его через инструменты.Убедитесь, что вы не пропускаете большие объемы памяти или потоков.Это может дать симптомы, которые вы описываете.

EDIT2

Почему бы не загрузить скрипт и хранить его в виде ивара или статики, а не загружать его по требованию?Даже скомпилированный, вы все равно должны прочитать его с диска, проанализировать и построить структуры данных.(Кроме того, этот вопрос отошел от предмета. Вы должны закрыть его и начать новый вопрос о производительности Applescript. В противном случае он портит людей, которые ищут ответы позже.)

...