最大限度地缩短Google AdWords脚本的响应时间

时间:2015-01-12 15:44:09

标签: javascript google-adwords

在Google Script中,recommended将操作存储在数组中,然后在构建完所有操作后调用方法,以便在每次调用服务时最大限度地缩短响应时间。

例如在AdWords中:

脚本A

var adGroupBuilder = campaign.newAdGroupBuilder(); 

for (i = 0; i < 1000; i++) {
  var adGroupOperation = adGroupBuilder
    .withName(i.toString())
    .build();
}

var adGroups = adGroupOperation.getResult(); // method call

执行不到一秒

脚本B

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服务,但是响应时间会很长,而且不同结构是必需的。

1 个答案:

答案 0 :(得分:1)

我通过将操作推入数组然后按照建议here迭代它来解决它。

脚本C

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()。我认为这与谷歌如何处理他们的呼叫有关,可能是通过捕捉?

如果有人可以就此分享一些亮点,我们将不胜感激!