最大限度地缩短 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 如何处理呼叫有关,也许是通过捕获?
如果有人能就此分享一些信息,我们将不胜感激!
在 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 如何处理呼叫有关,也许是通过捕获?
如果有人能就此分享一些信息,我们将不胜感激!