Разница между просто ENTIRE_SCRIPT и FAST_ENTIRE_SCRIPT в целом трудноуловима
Разница есть и она очень существенна!
В режиме FAST_ENTIRE_SCRIPT ради скорости система полностью снимает с себя контроль над процессом выполнения и это может закончится плачевно. Поэтому этот режим называется незащищенным, а ENTIRE_SCRIPT, соответственно, защищенным.
Во время выполнения могут возникать ошибки. В этом случае происходит откат публикации к точке запуска скрипта и выдается сообщение об ошибке. Это все нормально. Но если в вашей функции есть блок try…catch и вы задали режим FAST_ENTIRE_SCRIPT система не заметит, что ошибка произошла в этом блоке, и что вы эту ошибку успешно обработали. Система откатит вашу публикацию к началу прямо посреди выполнения скрипта, а последний будет продолжать работать как ни в чем небывало непонятно с чем.
Поэтому если вы используете блоки try…catch, то режим FAST_ENTIRE_SCRIPT лучше не использовать. Возможно есть и другие ситуации, когда нельзя использовать FAST_ENTIRE_SCRIPT.
Если вы долго не можете понять почему ваш скрипт делает что то не то, попробуйте заменить FAST_ENTIRE_SCRIPT на ENTIRE_SCRIPT. Приведу такой пример. Выполните его двух этих режимах и вы заметите разницу.
Код:
var myFunc = function() {
var myTextFrame = app.activeDocument.textFrames[0];
myTextFrame.contents = "Hello world\n";
try {
for (var x in myTextFrame) {
var a = myTextFrame[x];
}
}
catch (e) {
myTextFrame.contents += e + "\n";
}
}
app.doScript(
myFunc,
ScriptLanguage.javascript,
undefined,
UndoModes.ENTIRE_SCRIPT, // или FAST_ENTIRE_SCRIPT
"myFunc"
);