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

Minimize response time from Google AdWords Script

在 Google 脚本中,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,其中 returns 大约 15000 个实体,每批 1000 个,为此我正在开发一个 Google 脚本,将它们转换成 AdGroups 对应 Ads。显然,对他们的服务进行如此多的单独调用会导致超时错误。所以我想将它们分解为 15 个调用,每个调用包含 1000 个实体。


现在,我想知道是否可以将Ads添加到方法getResults()调用的操作数组中,或者AdGroup对象是否需要在我可以为它创建 Ad 之前实例化?

因为如果不这样做,除了为我想变成 Ad 的每个实体单独调用 AdWords 服务之外别无选择,但响应时间会非常长,并且需要不同的结构。

我通过将操作推入数组然后按照建议迭代它来解决它 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 秒后执行


但是,我仍然不太确定为什么这样会更快,因为仍然有 1000 个个人调用他们的服务与这个坏男孩:operations[i].getResult()。我认为这与 Google 如何处理呼叫有关,也许是通过捕获?

如果有人能就此分享一些信息,我们将不胜感激!