Веб-приложение с Google Script читает Gsheet Speed ​​Optimization - PullRequest
0 голосов
/ 28 апреля 2020

Я сделал простое веб-приложение с GS и теперь мне нужно оптимизировать скорость загрузки данных из Gsheet. Описание приложения:

Это инструмент для сбора правильных цветов продукта на изображении. Когда пользователь нажимает кнопку загрузки изображения, приложение считывает URL-адрес из Gsheet, где все задачи хранятся в строках, и загружает изображение. Затем пользователь выбирает цвета из палитры и отправляет цвета. Затем приложение сохранит выбранные значения цвета в той же строке URL-адреса изображения.

Каждое задание должно быть назначено n пользователям (не более, не меньше, по запросу обратной связи, как показано ниже), чтобы избежать смещения, и одно и то же задание должно не может быть назначен одному и тому же пользователю более одного раза. Поэтому я хранил задачи следующим образом:

index   imageID      URL   feedbackRequested   user   rgb_value
 1      104904677    ***          3                            
 2      104904677    ***          3                            
 3      104904677    ***          3  
 4      104904678    ***          2                           
 5      104904678    ***          2                                                      

Я распределял n feedbackRequested по n строкам, чтобы назначить задачи. Поэтому, когда пользователь нажимает на изображение загрузки, будет выполнено следующее:

  1. получить массив со всеми идентификаторами изображений, которые этот пользователь сделал;
  var user = Session.getActiveUser().getEmail();
  var data = sheet.getRange(1,2,sheet.getLastRow(),4).getValues();
  var filter_user = ArrayLib.filterByText(data, 3, user);
  var user_imageIDs = filter_user.map(function(value,index) {return value[0]});
если imageID находится в массиве или пользователь не пуст, продолжайте поиск, пока мы не найдем строку;
var ct = 1;
while ( (user_imageIDs.includes(data[ct][0])) || (data[ct][3] != '') ) {
    ct++;
  };
установить пользовательское значение для пользователя в этой строке и сохранить его ответ в rgb_value.
sheet.getRange(ct+1, 5,1,2).setValues(user, somevalue); 

Таким образом, поиск условной строки занимает много времени, пока l oop. Есть ли другие способы сделать это?

Я знаю, что это много информации. Большое спасибо заранее! Пожалуйста, дайте мне знать, если вам нужен весь код для воспроизведения.

1 Ответ

0 голосов
/ 28 апреля 2020
  • Создание набора идентификаторов изображений, которые содержат usr:
const imageSet = data.reduce((s,[id,_,_,usr])=> 
    usr === user ? s.add(id) : s,
  new Set)
  • Использование findIndex для поиска индекса массива data, где usr пусто, а id отсутствует в imageSet:
const ct = data.findIndex(([id,_,_,usr])=> usr === "" && !imageSet.has(id))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...