#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. Спасибо всем за вашу помощь, я снял блокировку, и теперь она, кажется, работает более плавно.