我正在创建一个脚本,负责生成一个报告,其中包含有关谷歌应用脚本中的一组论坛及其联系人的信息。
如果我选择了几个组,一切都会好的但如果我选择了几个(20个或更多),那么脚本会启动"超过最长执行时间"错误。
如何减少脚本时间执行?
谢谢!
我的(简化)脚本
var allContactsInfo = []
/II. For each group
for(var i = 0 ; i < numberOfGroups ; i++)
{
var selected = eventInfo.parameter["group"+i]
var contactInfo = []
//III. If it has been selected by the user
if(selected)
{
//IV. Get the contact group and contacts
var contactGroup = ContactsApp.getContactGroupById(eventInfo.parameter["group_"+i+"_id"])
var contacts = contactGroup.getContacts()
//IV. Iterate over each group contact
for (var j=0; j < contacts.length; j++)
{
var contact = contacts[j];
contactInfo.push(contact.getGivenName())
contactInfo.push(contact.getFamilyName())
var groups = contact.getContactGroups()
var groupsAsArray = []
for (var k = 0 ; k < groups.length; k++)
{
groupsAsArray.push(groups[k].getName())
}
contactInfo.push(groupsAsArray.sort().join())
//V. Add the contact into the array
allContactsInfo.push(contactInfo)
}
}
...
...
//VI. Fill the spreadsheet with the array built within the loop
sheet.getRange(1, 1, allContactsInfo.length, headers.length).setValues(allContactsInfo);
更新
经过一些测试后,我发现产生的瓶颈是返回用户的组(通过contact.getContactGroups())。
返回姓名,姓氏,电子邮件,地址和电话都可以,但如果我也包含用户组,则会出现超时异常......
更新2
这是我的工作解决方案,希望它有所帮助:)
https://github.com/antacerod/google-app-script-6-minutes-limitation
答案 0 :(得分:2)
最后我找到了另一个SO帖子。
它显示了与checkbox setValue方法实现及其第二个参数相关的一个很好的解决方法(设置是否应检查CheckBox,如果值因此调用而发生更改,则可选择触发事件)
就我而言,它就像一个魅力!