我是Google脚本的新手。
任何人都可以提供一些如何提高编码性能的建议?如果numOfEmail变量是一个非常大的数字,那么性能会变慢。
for (var i = 0; i < numOfEmail; i++)
{
var messages=threads[i].getMessages();
for (var j = 0; j < messages.length; j++)
{
sheet.getRange("A"+(lastEntry+i)).setValue(messages[j].getId());
sheet.getRange("B"+(lastEntry+i)).setValue(messages[j].getDate());
sheet.getRange("C"+(lastEntry+i)).setValue(messages[j].getFrom());
sheet.getRange("D"+(lastEntry+i)).setValue(messages[j].getSubject());
sheet.getRange("E"+(lastEntry+i)).setValue(messages[j].getTo());
sheet.getRange("F"+(lastEntry+i)).setValue(messages[j].getCc());
sheet.getRange("G"+(lastEntry+i)).setValue(messages[j].getBcc());
if(i/numOfEmail*100-oldPercentage>4)
{
oldPercentage=i/numOfEmail*100;
sheet.toast(i/numOfEmail*100+"% completed", "In Progress", 3);
}
}
}
我确实问了谷歌,我发现a answer如何加快脚本速度,但我不知道如何修改代码。请劝告。
其实我想尝试将我的Gmail导出到电子表格。我使用的示例代码来自此link。目前的示例代码只能导出200封电子邮件,但我将其更改为1000,因为我的gmail acc中有大约500封++电子邮件。当我尝试运行代码时,运行脚本需要很长时间,并且永远不会结束运行。看起来像程序挂在代码中的某些位置。我想知道为什么。并且当每次脚本更新大约5-10行数据时至少需要20-30秒。
答案 0 :(得分:2)
您引用的最佳做法的规则1是“最小化对服务的调用”。这意味着您应该将尽可能多的功能移动到常规JavaScript中,并且不那么频繁地调用Google服务。你在循环中做的任何事情都是这种优化的主要目标。例如:
sheet.getRange("A"+(lastEntry+i)).setValue(messages[j].getId());
sheet.getRange("B"+(lastEntry+i)).setValue(messages[j].getDate());
sheet.getRange("C"+(lastEntry+i)).setValue(messages[j].getFrom());
sheet.getRange("D"+(lastEntry+i)).setValue(messages[j].getSubject());
sheet.getRange("E"+(lastEntry+i)).setValue(messages[j].getTo());
sheet.getRange("F"+(lastEntry+i)).setValue(messages[j].getCc());
sheet.getRange("G"+(lastEntry+i)).setValue(messages[j].getBcc());
变为
var values = [[messages[j].getId(),
messages[j].getDate(),
messages[j].getFrom(),
messages[j].getSubject(),
messages[j].getTo(),
messages[j].getCc(),
messages[j].getBcc()]];
sheet.getRange("A"+(lastEntry+i)+":G"+(lastEntry+i)).setValues(values);
将每行12个服务调用更改为2个。