Как я могу оптимизировать код Google Script onEdit (), запуск которого занимает 8 секунд?

#google-apps-script #google-sheets

Вопрос:

Я работаю над автоматическим сбором имен пользователей, когда они запрашивают товары. В настоящее время выполнение следующего кода с участием всего 1 пользователя занимает около 8 секунд. Я смотрю на то, чтобы им пользовались до 36 разных пользователей, и беспокоюсь, что у этого количества пользователей либо истечет время ожидания, либо возникнут ошибки.

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

 function onEdit(e) {  const lock = LockService.getScriptLock();  var row = e.range.getRow();  var col = e.range.getColumn();  var s = e.source.getActiveSheet().getName();  var user = Session.getActiveUser().getUsername();      lock.tryLock(15000);  if(lock.hasLock()){  if(((col === 3 || col === 9 || col === 15 || col === 21) amp;amp; s === "Study Hall Requests")){   if(typeof e.value !== 'undefined'){  e.source.getActiveSheet().getRange(row,col 1,1,2).setValues([[new Date(),user]]);  lock.releaseLock();  }else{  e.source.getActiveSheet().getRange(row,col 1,1,2).clearContent();  lock.releaseLock();  } }  

}}

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

1. Предоставьте сведения об отладке: Используйте console.time() для предоставления части, выполнение которой занимает больше всего времени.

2. Заменить var row = e.range.getRow(); var col = e.range.getColumn(); на e.range.rowStart , e.range.columnStart

3. Я бы не стал использовать блокировку для onEdit (). Реальность такова, что у нескольких пользователей будут проблемы, независимо от того, что вы делаете. Они просто не так быстро реагируют. 15-секундная задержка с 30-секундным таймаутом кажется мне немного растянутой. Вместо этого вы можете рассмотреть возможность установки триггера.

4. Кроме того, 1180 мс-это всего 1,1 с, а не 8 с

5. Спасибо всем за вашу помощь, я снял блокировку, и теперь она, кажется, работает более плавно.