Performance 如何使用FormApp…getResponses()减少脚本执行时间?

Performance 如何使用FormApp…getResponses()减少脚本执行时间?,performance,google-apps-script,google-forms,Performance,Google Apps Script,Google Forms,表单中内置的电子邮件收集功能为文本格式。我们有很多员工填写此表单,因此从下拉列表中进行选择比手动为每位员工输入电子邮件更方便。收集电子邮件的内置功能不允许使用下拉列表问题类型,因此我必须禁用它,并使用脚本将响应发送到电子邮件 此外,当您在表单中选择一个选项“传输”时,需要插入包含数据的附加更正行。这也是由脚本完成的 脚本工作正常,但不幸的是,它的执行时间达到了45秒。我觉得这个太大了 更新代码: 起初,我以为它是验收单的大尺寸,大约13000行。我创建了一个表的副本,将它减少到几十行,但是速度没

表单中内置的电子邮件收集功能为文本格式。我们有很多员工填写此表单,因此从下拉列表中进行选择比手动为每位员工输入电子邮件更方便。收集电子邮件的内置功能不允许使用下拉列表问题类型,因此我必须禁用它,并使用脚本将响应发送到电子邮件

此外,当您在表单中选择一个选项“传输”时,需要插入包含数据的附加更正行。这也是由脚本完成的

脚本工作正常,但不幸的是,它的执行时间达到了45秒。我觉得这个太大了

更新代码:

起初,我以为它是验收单的大尺寸,大约13000行。我创建了一个表的副本,将它减少到几十行,但是速度没有增加多少。 然后我从表格中删除了答案,答案不到9000个——同样的,我没有得到多少绩效提升

有人知道如何更改脚本算法以提高其性能吗

===

结论

感谢@TheMaster对console.time的帮助。由于这个工具,我在代码中发现了瓶颈。更准确地说,代码工作得很好,但它是关于与代码交互的电子表格系统的结构。结构需要优化。 还有一个想法可能是针对谷歌开发者的。如果有一个工具可以直观地以图形方式显示组成单个系统的电子表格和表格之间的关系,那将是一件好事。也许有某种数值特征,例如,反映其块之间的相互作用时间。这将使快速消除系统中的此类瓶颈并加以改进成为可能。

调查: 通过使用每个代码段的console.time和console.timeEnd来确定问题,并计算每个代码段的reachl所用的时间。 问题: 如中所述,这是由于电子表格过于臃肿,包含许多工作表和导入公式。这就需要更多的时间来获取准确的图纸并使用设置值:

console.time('section10'); // 25579ms 
var sheet = ss.getSheetByName(SHEET_NAME); 
console.timeEnd('section10');
//....
console.time('section12'); // 19449ms 
sheet.getRange(lr, 2, 1, 17).setValues([values]);
console.timeEnd('section12')
可能的解决方案: 减少纸张数量 减少相互关联的电子表格=导入*公式 删除每张图纸底部的空行和右侧的空列。
你能通过添加脚本更新到你的文章中吗?试着在代码的不同部分添加console.time'section1'和console.timeEnd'section1',找出哪个部分花费的时间最多。。。如果您了解了代码的部分,请尝试通过在该部分中添加小节来添加此信息,从而了解确切的行。你的床单可能是肿了。删除工作表,删除每张工作表底部和右侧的空单元格是的,底部没有空行,右侧没有空列,我会跟踪这一点。也许原因是电子表格超载了。它有30张表格,所有的表格都有一系列的公式,其中大部分都与其他电子表格相关。系统的结构可能需要改变。考虑添加调试和发现结果作为答案。正如你所说,这可能是由于导入了*公式
console.time('section10'); // 25579ms 
var sheet = ss.getSheetByName(SHEET_NAME); 
console.timeEnd('section10');
//....
console.time('section12'); // 19449ms 
sheet.getRange(lr, 2, 1, 17).setValues([values]);
console.timeEnd('section12')