- Сообщения
- 578
- Реакции
- 200
Можно поступить проще.
Функции в InDesign можно задать режим выполнения
У
Моя гипотеза:
Это можно обойти вот так, завернув вызов с режимом
Пользуюсь этим методом где-то год, на операциях с текстом ускорение сильно чувствуется.
Изначально трюк подсмотрен на сайте indiscripts.com.
Должен заметить, что оборачивать вызовы таким образом нужно только после тщательной отладки,
Функции в InDesign можно задать режим выполнения
entireScript
, а есть еще fastEntireScript
. Разница между ними не документирована, но fastEntireScript
работает иногда в десятки раз быстрее. У
fastEntireScript
есть недостатки - если попытаться откатить последнее действие скрипта, могут заодно откатиться и некоторые действия пользователя, которые были сделаны перед скриптом, поэтому широко его не применяют.Моя гипотеза:
entireScript
создает контрольные точки (snapshots) на каждом шаге выполнения скрипта, поэтому его скорость не так уж высока. fastEntireScript
контрольных точек не создает и прогоняет скрипт как бы в одну цельную транзакцию, но если движок не видит смысла создавать новую транзакцию, он запишет действия в старую и при откате будут непредсказуемо откатываться и действия пользователя.Это можно обойти вот так, завернув вызов с режимом
fastEntireScript
в вызов с режимом entireScript
.entireScript
гарантированно создаст новую транзакцию, а fastEntireScript
быстро ее провернет как одно целое.
JavaScript:
function main() {
// код
}
app.doScript(
"app.doScript(main,undefined,undefined,UndoModes.fastEntireScript);",
ScriptLanguage.JAVASCRIPT,
undefined,
UndoModes.entireScript
);
Пользуюсь этим методом где-то год, на операциях с текстом ускорение сильно чувствуется.
Изначально трюк подсмотрен на сайте indiscripts.com.
Должен заметить, что оборачивать вызовы таким образом нужно только после тщательной отладки,
doScript
в целом для отладки не очень приятен, а двойная обертка добавляет остроты ощущений.