google-apps-script - 带有 Google Script 的 Web App 读取 Gsheet 速度优化
问题描述
我用 GS 制作了一个简单的 Web 应用程序,现在需要优化从 Gsheet 加载数据的速度。应用说明:
它是一种在图像中收集产品正确颜色的工具。当用户单击加载图像按钮时,应用程序将从 Gsheet 中读取 URL,其中所有任务都存储在行中并加载图像。然后用户从调色板中选择颜色并提交颜色。然后应用程序会将选定的颜色值保存到图像 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 行来分配任务。因此,当用户单击加载图像时,将执行以下操作:
- 获取包含该用户已完成的所有 imageID 的数组;
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);
这样,使用 while 循环查找条件行需要花费大量时间。还有其他方法可以做到这一点吗?
我知道这是很多信息。首先十分感谢!如果您需要复制整个代码,请告诉我。
解决方案
推荐阅读
- c# - 带字符串参数的 RedirectToAction
- rust - 将 tokio::task::JoinHandle 存储在 HashMap 中并从另一个任务中访问它
- android - 我可以在我的应用程序的网络视图中使用其他人的网站吗?
- join - SQL Join queries on related data
- c++ - m_installedLocation = Package::Current().InstalledLocation(); function does not work
- r - Generating faceted pie charts to indicate weightages
- frontend - Why I can't enable frontend editing (TYPO3 Extension frontend_editing) in TYPO3 9.5?
- assembly - 除法的意外结果取决于我使用的是 EAX、AX 还是 AL
- python - Why network with linear layers can't learn anything
- javascript - Error with sending embed link with discord webhook using JS