具有 Google 脚本的 Web 应用程序读取 Gsheet 速度优化
Web App with Google Script reads Gsheet Speed Optimization
我用 GS 制作了一个简单的网络应用程序,现在需要优化从 Gsheet 加载数据的速度。应用说明:
它是一种在图像中收集产品正确颜色的工具。
当用户单击加载图像按钮时,应用程序将从 Gsheet 中读取 URL,其中所有任务都存储在行中并加载图像。然后用户从调色板中 select 颜色并提交颜色。然后应用程序会将 selected 颜色值保存到图像的同一行 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 行来分配任务。所以当用户点击加载图片时,将执行以下操作:
- 获取包含此用户已完成的所有图像 ID 的数组;
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 在数组中或者 user 不为空,继续查找直到找到该行;
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);
这样用while循环查找条件行要花很多时间。还有其他方法吗?
我知道这是很多信息。首先十分感谢!如果您需要重现整个代码,请告诉我。
我用 GS 制作了一个简单的网络应用程序,现在需要优化从 Gsheet 加载数据的速度。应用说明:
它是一种在图像中收集产品正确颜色的工具。 当用户单击加载图像按钮时,应用程序将从 Gsheet 中读取 URL,其中所有任务都存储在行中并加载图像。然后用户从调色板中 select 颜色并提交颜色。然后应用程序会将 selected 颜色值保存到图像的同一行 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 行来分配任务。所以当用户点击加载图片时,将执行以下操作:
- 获取包含此用户已完成的所有图像 ID 的数组;
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 在数组中或者 user 不为空,继续查找直到找到该行;
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);
这样用while循环查找条件行要花很多时间。还有其他方法吗?
我知道这是很多信息。首先十分感谢!如果您需要重现整个代码,请告诉我。