@lantan55

Service invoked too many times in a short time: exec qps. Как исправить?

Здравствуйте! Вопрос такой:
Знакомый попросил помочь ему с гугл таблицей, задача была такая: При вставке значения в ячейку, в соседней ячейке будет высчитываться текущее время заполнения ячейки и в зависимости от того, попала ли ячейка в нужный диапазон, она подкрашивалась бы либо зеленым, либо красным. Про цвета понятно, сделали стандартными средствами гугл таблиц.
На месте, где должно высчитываться время стоит формула =GETDATE(A3), которую описал в Редакторе скриптов
function GETDATE(input) {  
  if (input)
    return Utilities.formatDate(new Date(), "GMT+03:00", "HH:mm:ss");
  else
    return '';
};

Но спустя какое то время, он обратился ко мне с вопросом: чё то не работает твоя формула.
И я увидел, что у него в таблице на странице моя формула протянута на ячеек 50, листов в файле = кол-во дней в году и одновременно постоянно к этой таблице подключены около 6 человек.
Как то так:
5da5a1def2461935287299.jpeg
Я так понимаю, что задача теперь уже совсем не для гугл таблиц. И теперь у меня два вопроса:
1. Возможно ли как то исправить текущую формулу, чтобы она была менее затратна по ресурсам.
2. Где, кроме гугл таблиц можно такое реализовать? Возможно есть уже какие то готовые аналоги?
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
Главное, что можно сделать из простого - это вместо 50 вызовов делать один вызов на диапазон.
Код (грубый пример):
function GETDATE(input) {  
  if (input) {
    if (typeof input.map === "function") return input.map(GETDATE);
    return Utilities.formatDate(new Date(), "GMT+03:00", "HH:mm:ss");
  } else
    return '';
};
В самой таблице нужно будет не растягивать формулу, как обычно, а указать ее в первой ячейке, но в параметры передать диапазон:
=GETDATE(A3:A53)

Это должно немного снизить нагрузку. Когда пересчитывается весь столбец A3:A53, то по цепочке произойдет не 50 запросов, а один. Хотя визуально обновится весь столбец с датами.

Далее нужно смотреть, как устроена сама таблица. Если в A3 формула и она постоянно пересчитывается, то это плохо.

Еще такое (не очень красивое) решение. Можно сделать кнопку, которую, предполагается, нужно нажимать не часто. То есть пользователь редактировал таблицу минут 10, а затем нажимает кнопку, и соответствующий скрипт проставляет даты. Погрешность увеличится, удобство уменьшится, и отдельный вопрос, как это всё сделать, но в лимиты можно будет влезть.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы