在Google Script中,recommended将操作存储在数组中,然后在构建完所有操作后调用方法,以便在每次调用服务时最大限度地缩短响应时间。
例如在AdWords中:
var adGroupBuilder = campaign.newAdGroupBuilder();
for (i = 0; i < 1000; i++) {
var adGroupOperation = adGroupBuilder
.withName(i.toString())
.build();
}
var adGroups = adGroupOperation.getResult(); // method call
执行不到一秒。
var adGroupBuilder = campaign.newAdGroupBuilder();
for (i = 0; i < 1000; i++) {
var adGroupOperation = adGroupBuilder
.withName(i.toString())
.build();
var adGroups = adGroupOperation.getResult(); // method call
}
执行将近6分钟。
在AdWords中,AdGroup
可以有多个Ads
,为了创建Ad
,必须有相应的AdGroup
。
我有一个外部API,每批返回大约15 000个实体,每批1000个实体,我正在开发一个Google脚本,将这些实体转换为AdGroups
对应的Ads
。显然,要对服务进行多次单独调用会导致超时错误。所以我想将它们分成15个调用,每个调用1000个实体。
现在,我想知道是否可以将Ads
添加到方法getResults()
调用的操作数组中,或者AdGroup
对象是否需要在我为它创建Ad
之前进行实例化?
因为如果不是,我认为没有其他选择,只能为我想要变成Ad
的每个实体单独拨打AdWords服务,但是响应时间会很长,而且不同结构是必需的。
答案 0 :(得分:1)
我通过将操作推入数组然后按照建议here迭代它来解决它。
var adGroupBuilder = campaign.newAdGroupBuilder();
var operations = [];
for (i = 0; i < 1000; i++) {
var adGroupOperation = adGroupBuilder
.withName(i.toString())
.build();
operations.push(adGroupOperation);
}
for (var i = 0; i < operations.length; i++) {
var adGroup = operations[i].getResult();
var adOperation = adGroup.newTextAdBuilder()
.withHeadline("headline of ad")
.withDescription1("first line of ad description")
.withDescription2("second line of ad description")
.withDisplayUrl("www.example.com")
.withDestinationUrl("http://www.example.com")
.build();
}
var ad = adOperation.getResult();
在大约8秒中执行。
然而,我仍然不太清楚为什么会更快,因为这个badboy仍有1000个个人调用他们的服务:operations[i].getResult()
。我认为这与谷歌如何处理他们的呼叫有关,可能是通过捕捉?
如果有人可以就此分享一些亮点,我们将不胜感激!