最大限度地减少Google AdWords Script的响应时间

Minimize response time from Google AdWords Script

本文关键字:Script 响应时间 AdWords Google 最大限度      更新时间:2023-09-26

在Google脚本中,建议将操作存储在数组中,然后在构造完所有操作后调用方法,以最大程度地减少每次调用服务时的响应时间。

例如在 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 脚本,将这些实体转换为具有相应AdsAdGroups。显然,对其服务进行如此多的单独调用会导致超时错误。因此,我想将它们分解为 15 个调用,每个调用包含 1000 个实体。


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

因为如果没有,我认为别无选择,只能为我想变成Ad的每个实体单独调用AdWords服务,但是响应时间会非常高,并且需要不同的结构。

我通过将操作推送到数组中然后按照此处的建议对其进行迭代来解决它。

脚本 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() .我认为这与谷歌如何处理他们那端的电话有关,也许是通过捕捉?

如果有人能分享一些关于这一点的启示,将不胜感激!