Отличаются ли тайм-ауты выполнения скрипта Google Apps для выполнения триггера и редактора?

#javascript #google-apps-script #google-sheets #timeout

#javascript #google-apps-script #google-sheets #тайм-аут

Вопрос:

У меня есть таблица составления бюджета Google Sheets, которая использует функциональность javascript для автоматического добавления нового листа на каждую неделю (на основе текущей даты открытия электронной таблицы). Я использую итерации этого скрипта уже много лет.

Совсем недавно у меня начал истекать тайм-аут скрипта. [РЕДАКТИРОВАТЬ: в прошлом я использовал этот же скрипт для добавления и обновления нескольких листов одновременно. Теперь я, похоже, не могу успешно добавить даже один.] Однако, если я открою редактор сценариев и запущу функцию оттуда, она будет работать отлично. В журнале выполнения я вижу, что время выполнения триггера истекает примерно через 30 секунд, но выполнение редактора выполняется каждый раз и занимает около 40 секунд.

Набирая это, я заметил, что в квотах Google существует ограничение на время выполнения 30 секунд для каждой пользовательской функции. Почему это отличается при запуске из редактора?

Комментарии:

1. Отсюда : «Ограничения, указанные ниже, предоставлены исключительно для того, чтобы помочь вам в тестировании скриптов. Все ограничения могут быть устранены, сокращены или изменены в любое время без предварительного уведомления. » Я думаю, что они говорят «потому что мы так сказали».

2. Хм . . . да . . .

3. Ваш скрипт находится в версии времени выполнения V8?

4. Это не так, но когда я заметил, что он не завершается должным образом, я открыл редактор и увидел сообщение V8, и я переключился. Итак, на момент запуска операции, да, это было в версии 8. Похоже, что в версии 8 он ведет себя так же, как и до того, как я переключился.

Ответ №1:

В соответствии с официальными ограничениями квот скрипты Apps Script (т.Е. Те, Которые запускаются из редактора сценариев или с помощью подобного триггера onEdit() ) имеют ограничение по времени ожидания в 6 минут на выполнение, в то время как пользовательские функции имеют ограничение по времени ожидания в 30 секунд на выполнение.

Эти пользовательские функции являются функциями скрипта приложений, созданными для использования в электронной таблице в качестве формул, и поэтому они выполняются по-разному и имеют разное время ожидания для выполнения.

Комментарии:

1. Да, это мне немного помогает. Я не знал, что когда я создавал функцию, она предназначалась для использования в электронной таблице в качестве формулы. Я только пытался следовать правилам этикета кодирования, создавая и вызывая функции, но, возможно, я смогу сократить код, чтобы исключить пользовательские функции …

2. Спасибо за помощь. Я решил, что onOpen() создаст новый пункт меню, в котором я могу вручную запустить пользовательскую функцию, поэтому 30-секундный тайм-аут больше не является проблемой. Я до сих пор не уверен, почему этого не происходило до недавнего времени. Может быть, я добавил достаточно бюджетных строк, чтобы процесс стал слишком долгим? Но это отлично подходит для моих целей!

3. Да, поэтому, если вы используете onOpen() триггер, вы получите 6-минутный тайм-аут, поскольку вы не вызываете функцию скрипта приложений из пользовательской формулы электронной таблицы (вместо этого вы вызываете функцию из строки меню). В любом случае, я рад, что был полезен: D