En İyi Uygulamalar

Bu sayfada, Google Ads komut dosyalarıyla geliştirmeyle ilgili çeşitli en iyi uygulamalar ele alınmaktadır.

Seçiciler

Seçicilerle filtreleme

Mümkün olduğunda, yalnızca ihtiyacınız olan varlıkları istemek için filtreleri kullanın. Uygulanıyor uygun filtrelerin aşağıdaki avantajları vardır:

  • Kod daha basit ve daha kolay anlaşılır.
  • Komut dosyası çok daha hızlı çalışır.

Aşağıdaki kod snippet'lerini karşılaştırın:

Kodlama yaklaşımı Kod snippet'i
Seçicileri kullanarak filtreleme (önerilen)
var keywords = AdsApp.keywords()
    .withCondition('Clicks > 10')
    .forDateRange('LAST_MONTH')
    .get();
while (keywords.hasNext()) {
  var keyword = keywords.next();
  // Do work here.
}
Kodu filtreleme (önerilmez)
var keywords = AdsApp.keywords().get();

while (keywords.hasNext()) {
  var keyword = keywords.next();
  var stats = keyword.getStatsFor(
      'LAST_MONTH');
  if (stats.getClicks() > 10) {
    // Do work here.
  }
}

İkinci yaklaşım, listeyi almaya çalıştığı için önerilmez anahtar kelimelerin listesini oluşturmak için yalnızca listeye filtre uygulayabilirsiniz.

Kampanya hiyerarşisinde gezinmekten kaçının

Belirli bir düzeydeki varlıkları almak istediğinizde bir koleksiyon kullanın yöntemini kullanabilirsiniz. İçinde bu yöntem daha basit olmakla birlikte çok daha iyi bir performans gösterecektir: sistem, kampanya ve reklam gruplarının tümünü gereksiz yere okumak zorunda kalmazsınız.

Hesabınızdaki tüm reklamları alan aşağıdaki kod snippet'lerini karşılaştırın:

Kodlama yaklaşımı Kod snippet'i
Uygun toplama yöntemini kullanın (Önerilen)
var ads = AdsApp.ads();

Hiyerarşiyi dolaşın (Önerilmez)
var campaigns = AdsApp.campaigns().get();
while (campaigns.hasNext()) {
  var adGroups = campaigns.next().
      adGroups().get();
  while (adGroups.hasNext()) {
    var ads = adGroups.next().ads().get();
    // Do your work here.
  }
}

İkinci yaklaşım ise tüm sonuçları almaya çalıştığı için önerilmez. nesne (kampanyalar, reklam grupları) hiyerarşileri oluştururken yalnızca reklamlar gereklidir.

Belirli ebeveyn erişim yöntemlerini kullanma

Bazen, alınan bir nesnenin üst öğesini almanız gerekir. Bu durumda, tüm hiyerarşileri getirmek yerine sağlanan bir erişim yöntemini kullanmanız gerekir.

Şu reklam gruplarını alan reklam gruplarını alan aşağıdaki kod snippet'lerini karşılaştırın: geçen ay 50'den fazla tıklama alan metin reklamlara sahipseniz:

Kodlama yaklaşımı Kod snippet'i
Uygun ebeveyn erişimci yöntemini kullan (önerilir)
var ads = AdsApp.ads()
    .withCondition('Clicks > 50')
    .forDateRange('LAST_MONTH')
    .get();

while (ads.hasNext()) {
  var ad = ads.next();
  var adGroup = ad.getAdGroup();
  var campaign = ad.getCampaign();
  // Store (campaign, adGroup) to an array.
}
Hiyerarşiyi tara (önerilmez)
var campaigns = AdsApp.campaigns().get();
while (campaigns.hasNext()) {
  var adGroups = campaigns.next()
      .adGroups()
      .get();
  while (adGroups.hasNext()) {
    var ads = adGroups.ads()
       .withCondition('Clicks > 50')
       .forDateRange('LAST_MONTH')
       .get();
    if (ads.totalNumEntities() > 0) {
      // Store (campaign, adGroup) to an array.
    }
  }
}

İkinci yaklaşım, kampanyanın tamamını getirdiğinden önerilmez ve reklam grubu hiyerarşileri oluştururken, bunların yalnızca bir kampanyaları ve reklam grubunuzla ilişkili olan reklam gruplarınızı görebilirsiniz. İlk yaklaşım, yalnızca alakalı reklam koleksiyonunu getirmekle sınırlıdır ve üst öğelerine erişmek için uygun bir yöntem kullanır.

Belirli üst filtreleri kullanma

Belirli bir kampanya veya reklam grubundaki öğelere erişmek için, hiyerarşiyi getirip taramak yerine seçicide belirli bir filtre kullanın.

Metin reklam listesini alan aşağıdaki kod snippet'lerini karşılaştırın belirli bir kampanya ve reklam grubunda son 50'den fazla tıklama olan ay.

Kodlama yaklaşımı Kod snippet'i
Uygun üst düzey filtreleri kullanın (önerilir)
var ads = AdsApp.ads()
    .withCondition('CampaignName = "Campaign 1"')
    .withCondition('AdGroupName = "AdGroup 1"')
    .withCondition('Clicks > 50')
    .forDateRange('LAST_MONTH')
    .get();

while (ads.hasNext()) {
  var ad = ads.next();
  var adGroup = ad.getAdGroup();
  var campaign = ad.getCampaign();
  // Store (campaign, adGroup, ad) to
  // an array.
}
Hiyerarşiyi tara (önerilmez)
var campaigns = AdsApp.campaigns()
    .withCondition('Name = "Campaign 1"')
    .get();

while (campaigns.hasNext()) {
  var adGroups = campaigns.next()
      .adGroups()
      .withCondition('Name = "AdGroup 1"')
      .get();
  while (adGroups.hasNext()) {
    var ads = adGroups.ads()
       .withCondition('Clicks > 50')
       .forDateRange('LAST_MONTH')
       .get();
    while (ads.hasNext()) {
      var ad = ads.next();
      // Store (campaign, adGroup, ad) to
      // an array.
    }
  }
}

İkinci yaklaşım ise kampanya ve reklam üzerinde yinelendiği için önerilmez hesabınızdaki grup hiyerarşisini kullanabilirsiniz. Bununla birlikte, yalnızca seçtiğiniz bir grup reklama reklam gruplarıyla birlikte gruplanıyor. İlk yaklaşım, seçicideki üst öğeler için belirli bir filtre uygulayarak iterasyonu reklam listesiyle sınırlandırır.

Mümkün olduğunda filtreleme için kimlikleri kullan

Öğeleri filtrelerken diğer alanlar yerine kimliklerine göre filtreleme yapılması tercih edilir.

Bir kampanya seçmek için aşağıdaki kod snippet'lerini kullanmayı düşünün.

Kodlama yaklaşımı Kod snippet'i
Kimliğe göre filtreleme (önerilir)
var campaign = AdsApp.campaigns()
    .withIds([12345])
    .get()
    .next();
Ad'a göre filtreleme (daha az uygun)
var campaign = AdsApp.campaigns()
    .withCondition('Name="foo"')
    .get()
    .next();

Kimlik dışı bir alana göre filtrelediğimiz için ikinci yaklaşım daha az optimumdur.

Mümkün olduğunda ebeveyn kimliklerine göre filtreleme

Bir varlık seçerken mümkünse üst kimliklere göre filtreleyin. Bu, tarafından alınan varlıkların listesini sınırlandırarak sorgularınızı hızlandırın. sunucu tarafından kontrol edilir.

Bir Reklam Grubunu kimliğine göre alan aşağıdaki kod snippet'ini ele alalım. Üst kampanya kimliğinin bilindiği varsayılır.

Kodlama yaklaşımı Kod snippet'i
Kampanya ve reklam grubu kimliklerine göre filtreleme (önerilir)
var adGroup = AdsApp.adGroups()
    .withIds([12345])
    .withCondition('CampaignId="54678"')
    .get()
    .next();
Yalnızca reklam grubu kimliğine göre filtreleme (daha az optimum)
var adGroup = AdsApp.adGroups()
    .withIds([12345])
    .get()
    .next();

Her iki kod snippet'i de aynı sonuçları verse de, ek kod snippet'i 1'de (CampaignId="54678") üst kimliği kullanılarak yapılan filtreleme, Sunucunun sahip olduğu varlıkların listesini kısıtlayarak kodu daha verimli hale getirir. iterasyonlar yapabilir.

Çok fazla filtreleme koşulu olduğunda etiketleri kullanma

Çok fazla filtreleme koşulunuz varsa işlediğiniz öğeler için bir etiket oluşturmak ve öğelerinizi filtrelemek için bu etiketi kullanmak iyi bir fikirdir.

Aşağıdaki kod snippet'ini inceleyin. Bu snippet, kampanyaların adını kullanarak bir liste alır.

Kodlama yaklaşımı Kod snippet'i
Etiket kullanma (önerilir)
var label = AdsApp.labels()
    .withCondition('Name = "My Label"')
    .get()
    .next();
var campaigns = label.campaigns.get();
while (campaigns.hasNext()) {
  var campaign = campaigns.next();
  // Do more work
}
Karmaşık seçiciler oluşturun (önerilmez)
var campaignNames = [‘foo’, ‘bar’, ‘baz’];

for (var i = 0; i < campaignNames.length; i++) {
  campaignNames[i] = '"' + campaignNames[i] + '"';
}

var campaigns = AdsApp.campaigns
    .withCondition('CampaignName in [' + campaignNames.join(',') + ']')
    .get();

while (campaigns.hasNext()) {
  var campaign = campaigns.next();
  // Do more work.
}

Her iki kod snippet'i de benzer düzeyde performans sağlasa da, ikinci olarak yaklaşımdaki koşul sayısı nedeniyle daha karmaşık seçiciniz artar. Etiketi yeni bir öğeye uygulamak da daha kolaydır komut dosyasını yeni bir öğe içerecek şekilde düzenlemekten daha iyidir.

IN yan tümcesinde koşul sayısını sınırlama

Komut dosyalarını çalıştırırken yaygın bir kullanım alanı, varlık listesi için rapor çalıştırmaktır. Geliştiriciler genellikle bunu, bir IN yan tümcesi kullanarak varlık kimliklerini filtreleyen çok uzun bir AWQL sorgusu oluşturarak yapar. Bu yaklaşım, varlık sayısı sınırlı olduğunda iyi çalışır. Ancak sorgunuzun uzunluğu arttıkça komut dosyası performansınız iki nedenden dolayı düşer:

  • Daha uzun bir sorgunun ayrıştırılması daha uzun sürer.
  • IN ifadesine eklediğiniz her kimlik, değerlendirilmesi gereken ek bir koşuldur ve bu nedenle daha uzun sürer.

Bu tür koşullarda öğelere etiket uygulanması tercih edilir ve ve ardından LabelId ölçütüne göre filtreleyin.

Kodlama yaklaşımı Kod snippet'i
Etiket uygulama ve etiket kimliğine göre filtreleme (önerilir)
// The label applied to the entity is "Report Entities"
var label = AdsApp.labels()
    .withCondition('LabelName contains "Report Entities"')
    .get()
    .next();

var report = AdsApp.report('SELECT AdGroupId, Id, Clicks, ' +
    'Impressions, Cost FROM KEYWORDS_PERFORMANCE_REPORT ' +
    'WHERE LabelId = "' + label.getId() + '"');
IN yan tümcesini kullanarak uzun bir sorgu oluşturma (önerilmez)
var report = AdsApp.report('SELECT AdGroupId, Id, Clicks, ' +
    'Impressions, Cost FROM KEYWORDS_PERFORMANCE_REPORT WHERE ' +
    'AdGroupId IN (123, 456) and Id in (123,345, 456…)');

Hesap güncellemeleri

Toplu değişiklikler

Bir Google Ads öğesinde değişiklik yaptığınızda Google Ads komut dosyaları bu değişikliği hemen yürütmez. Bunun yerine, birden fazla değişiklik yapan tek bir istek gönderebilmek için birden fazla değişikliği gruplar halinde birleştirmeye çalışır. Bu yaklaşım, komut dosyalarınızı hızlandırır ve Google Ads sunucularındaki yükü azaltır. Ancak Google Ads komut dosyalarını işlem grubunu sık sık temizlemeye zorlayan ve böylece komut dosyanızın yavaş çalışmasına neden olan bazı kod kalıpları vardır.

Bir anahtar kelime listesinin tekliflerini güncelleyen aşağıdaki komut dosyasını düşünün.

Kodlama yaklaşımı Kod snippet'i
Güncellenen öğeleri takip edin (önerilir)
var keywords = AdsApp.keywords()
    .withCondition('Clicks > 50')
    .withCondition('CampaignName = "Campaign 1"')
    .withCondition('AdGroupName = "AdGroup 1"')
    .forDateRange('LAST_MONTH')
    .get();

var list = [];
while (keywords.hasNext()) {
  var keyword = keywords.next();
  keyword.bidding().setCpc(1.5);
  list.push(keyword);
}

for (var i = 0; i < list.length; i++) {
  var keyword = list[i];
  Logger.log('%s, %s', keyword.getText(),
      keyword.bidding().getCpc());
}
Güncellenmiş öğeleri sıkı bir döngü içinde alın (önerilmez)
var keywords = AdsApp.keywords()
    .withCondition('Clicks > 50')
    .withCondition('CampaignName = "Campaign 1"')
    .withCondition('AdGroupName = "AdGroup 1"')
    .forDateRange('LAST_MONTH')
    .get();

while (keywords.hasNext()) {
  var keyword = keywords.next();
  keyword.bidding().setCpc(1.5);
  Logger.log('%s, %s', keyword.getText(),
      keyword.bidding().getCpc());
}

İkinci yaklaşım, keyword.bidding().getCpc(), Google Ads komut dosyalarını setCpc() boşaltmaya zorlar aynı anda yalnızca bir işlem yürütmelidir. İlk yaklaşımda Bu yöntem, ikinci yaklaşıma benzer şekilde, toplu işlemin getCpc() çağrısı, döngüde yapılan çağrıdan ayrı bir döngüde yapıldığı için setCpc() çağrıldı.

Mümkün olduğunda derleyicileri kullanın

Google Ads komut dosyaları, yeni nesne oluşturmanın iki yolunu destekler: oluşturucu ve oluşturma yöntemlerine göz atın. İnşaatçılar, oluşturma yöntemlerinden daha esnektir çünkü size API çağrısından oluşturulan nesneye erişim.

Aşağıdaki kod snippet'lerini kullanabilirsiniz:

Kodlama yaklaşımı Kod snippet'i
Oluşturucuları kullanın (önerilir)
var operation = adGroup.newKeywordBuilder()
    .withText('shoes')
    .build();
var keyword = operation.getResult();
Oluşturma yöntemlerini kullanma (önerilmez)
adGroup.createKeyword('shoes');
var keyword = adGroup.keywords()
    .withCondition('KeywordText="shoes"')
    .get()
    .next();

Ek seçim işlemi nedeniyle ikinci yaklaşım tercih edilmez dahil olması gerekir. Bunun yanı sıra, içerik oluşturma yöntemleri desteği sonlandırıldı.

Bununla birlikte, inşaatçıların yanlış kullanıldıklarında Google'ın Reklam komut dosyalarının işlemlerini toplu olarak yapmasını engeller.

Bir anahtar kelime listesi oluşturan aşağıdaki kod snippet'lerini göz önünde bulundurun: ve yeni oluşturulan anahtar kelimelerin kimliğini yazdırır:

Kodlama yaklaşımı Kod snippet'i
Güncellenen öğeleri takip edin (önerilir)
var keywords = [‘foo’, ‘bar’, ‘baz’];

var list = [];
for (var i = 0; i < keywords.length; i++) {
  var operation = adGroup.newKeywordBuilder()
      .withText(keywords[i])
      .build();
  list.push(operation);
}

for (var i = 0; i < list.length; i++) {
  var operation = list[i];
  var result = operation.getResult();
  Logger.log('%s %s', result.getId(),
      result.getText());
}
Güncellenen öğeleri sıkı bir döngüde alma (önerilmez)
var keywords = [‘foo’, ‘bar’, ‘baz’];

for (var i = 0; i < keywords.length; i++) {
  var operation = adGroup.newKeywordBuilder()
      .withText(keywords[i])
      .build();
  var result = operation.getResult();
  Logger.log('%s %s', result.getId(),
      result.getText());
}

İkinci yaklaşım, işlemi oluşturan aynı döngü içinde operation.getResult() çağrısında bulunduğundan ve böylece Google Ads komut dosyalarını bir seferde bir işlem yürütmeye zorladığından tercih edilmez. İlk yaklaşım benzer olsa da operation.getResult() işlevini oluşturulduğu yerden farklı bir döngüde çağırdığımız için toplu işleme olanak tanır.

Büyük güncellemeler için toplu yükleme özelliğini kullanmayı düşünebilirsiniz

Geliştiricilerin sıklıkla yaptığı bir görev, rapor çalıştırmak ve varlık özelliklerini (ör. anahtar kelime teklifleri) mevcut performans değerlerine göre güncellemektir. Zaman çok sayıda öğeyi güncellemeniz gerekir. Toplu yüklemeler genellikle daha iyi performans. Örneğin, dönüşüm oranını artıran geçen ay TopImpressionPercentage > 0.4 olan anahtar kelimelerin maksimum TBM'si:

Kodlama yaklaşımı Kod snippet'i
Toplu yüklemeyi kullan (önerilir)
var report = AdsApp.report(
  'SELECT AdGroupId, Id, CpcBid FROM KEYWORDS_PERFORMANCE_REPORT ' +
  'WHERE TopImpressionPercentage > 0.4 DURING LAST_MONTH');

var upload = AdsApp.bulkUploads().newCsvUpload([
  report.getColumnHeader('AdGroupId').getBulkUploadColumnName(),
  report.getColumnHeader('Id').getBulkUploadColumnName(),
  report.getColumnHeader('CpcBid').getBulkUploadColumnName()]);
upload.forCampaignManagement();

var reportRows = report.rows();
while (reportRows.hasNext()) {
  var row = reportRows.next();
  row['CpcBid'] = row['CpcBid'] + 0.02;
  upload.append(row.formatForUpload());
}

upload.apply();
Anahtar kelimeleri kimliğe göre seçip güncelleme (daha az uygun)
var reportRows = AdsApp.report('SELECT AdGroupId, Id, CpcBid FROM ' +
    'KEYWORDS_PERFORMANCE_REPORT WHERE TopImpressionPercentage > 0.4 ' +
    ' DURING LAST_MONTH')
    .rows();

var map = {
};

while (reportRows.hasNext()) {
  var row = reportRows.next();
  var adGroupId = row['AdGroupId'];
  var id = row['Id'];

  if (map[adGroupId] == null) {
    map[adGroupId] = [];
  }
  map[adGroupId].push([adGroupId, id]);
}

for (var key in map) {
  var keywords = AdsApp.keywords()
      .withCondition('AdGroupId="' + key + '"')
      .withIds(map[key])
      .get();

  while (keywords.hasNext()) {
    var keyword = keywords.next();
    keyword.bidding().setCpc(keyword.bidding().getCpc() + 0.02);
  }
}

İkinci yaklaşım oldukça iyi performans sağlasa da, ilk yaklaşım bu durumda tercih edilir

  • Google Ads komut dosyalarının alınabilecek nesne sayısı sınırlıdır veya tek bir çalıştırmada güncellenir ve bu sınırda hesaba katılır.

  • Toplu yüklemelerde, izin verilen öğe sayısı açısından daha yüksek sınırlar vardır. ve genel yürütme süresini ölçer.

Toplu yüklemelerinizi kampanyalara göre gruplandırma

Toplu yüklemelerinizi oluştururken işlemlerinizi üst öğeye göre gruplandırmayı deneyin pek de iyi olmadığını unutmayın. Bu, verimliliği artırır ve çelişen değişiklikler/eşzamanlılık hataları olasılığını azaltır.

Paralel olarak çalışan iki toplu yükleme görevi düşünün. Biri, bir reklamdaki reklamları duraklatır group; diğeri anahtar kelime tekliflerini ayarlar. İşlemler birbiriyle alakalı olmasa da aynı reklam grubundaki öğeler (veya aynı kampanya altındaki iki farklı reklam grubu) için geçerli olabilir. Böyle bir durumda sistem, ana varlık (paylaşılan reklam grubu veya kampanya) nedeniyle toplu yükleme bir engeli olabilir.

Google Ads komut dosyaları, tek bir toplu yükleme görevi içinde yürütme işlemini optimize edebilir. Yapılacak en basit şey, şurada hesap başına yalnızca bir toplu yükleme görevi çalıştırmaktır: birlikte çalışır. Hesap başına birden fazla toplu yükleme çalıştırmaya karar verirseniz toplu yüklemelerin optimum performans için birbirini hariç tutan kampanya listesinde (ve alt öğelerinde) çalıştığından emin olun.

Raporlama

İstatistikleri getirmek için raporları kullanın.

Çok sayıda öğe ve bu öğelerin istatistiklerini almak istediğinizde genellikle standart AdsApp yöntemleri yerine raporları kullanmak daha iyidir. Raporların kullanılması aşağıdaki nedenlerden dolayı tercih edilir:

  • Raporlar, büyük sorgularda daha iyi performans elde etmenizi sağlar.
  • Raporlar normal getirme kotalarına ulaşmaz.

Geçen ay 50'den fazla tıklama alan tüm anahtar kelimelerin Tıklama, Gösterim, Maliyet ve Metin değerlerini getiren aşağıdaki kod snippet'lerini karşılaştırın:

Kodlama yaklaşımı Kod snippet'i
Raporları kullanma (önerilir)
  report = AdsApp.search(
      'SELECT ' +
      '   ad_group_criterion.keyword.text, ' +
      '   metrics.clicks, ' +
      '   metrics.cost_micros, ' +
      '   metrics.impressions ' +
      'FROM ' +
      '   keyword_view ' +
      'WHERE ' +
      '   segments.date DURING LAST_MONTH ' +
      '   AND metrics.clicks > 50');
  while (report.hasNext()) {
    var row = report.next();
    Logger.log('Keyword: %s Impressions: %s ' +
        'Clicks: %s Cost: %s',
        row.adGroupCriterion.keyword.text,
        row.metrics.impressions,
        row.metrics.clicks,
        row.metrics.cost);
  }
AdsApp yinelemelerini kullanın (önerilmez)
var keywords = AdsApp.keywords()
    .withCondition('metrics.clicks > 50')
    .forDateRange('LAST_MONTH')
    .get();
while (keywords.hasNext()) {
  var keyword = keywords.next();
  var stats = keyword.getStatsFor('LAST_MONTH');
  Logger.log('Keyword: %s Impressions: %s ' +
      'Clicks: %s Cost: %s',
      keyword.getText(),
      stats.getImpressions(),
      stats.getClicks(),
      stats.getCost());
}

İkinci yaklaşım, anahtar kelimelerin üzerinden tekrarlandığı için tercih edilmez ve her seferinde bir varlık gösterir. Raporlar bu tür tek bir görüşmedeki tüm verileri getirir ve bunları gereklidir. Buna ek olarak, ikinci yaklaşımda alınan anahtar kelimeler kullanılarak alınan varlık sayısı için komut dosyanızın kotasında hesaba katılır get() araması.

Bildirme yerine arama özelliğini kullanın

Rapor yöntemi, eski altyapı için oluşturulmuştur ve istenen sonuçları verir düz bir biçimde kaydedebilirsiniz. Bu, sorgunun sonuçlarını eski stille eşleşecek şekilde dönüştürmesi gerektiği anlamına gelir. Bu, tüm alanlar için desteklenmez ve her çağrıya ek yük ekler.

Google Etiket Yöneticisi'nin tüm özelliklerinden yararlanmak için yeni Google Ads API raporları.

GAQL'yi AWQL'e tercih et

AWQL, rapor sorgularında ve withCondition çağrılarında hâlâ desteklense de tam uyumlu olmayan bir çeviri katmanından geçiriliyor. test eder. Sorgularınız üzerinde tam kontrol sahibi olmak için GAQL kullandığınızdan emin olun.

Çevirmek istediğiniz mevcut AWQL sorgularınız varsa size yardımcı olacak bir Sorgu Taşıma Aracı'mız var.

İhtiyacınız olandan daha fazla satır seçmeyin

Raporların (ve seçicilerin) yürütülme hızı, Google Analytics 4'teki isterseniz, raporun her ikisinde de rapor tarafından döndürülecek satırların bunları tekrar tekrar uygulayabilirsiniz. Bu, kullanım alanınızla eşleşecek şekilde sonuç kümesini mümkün olduğunca en aza indirmek için her zaman belirli filtreler kullanmanız gerektiği anlamına gelir.

Örneğin, teklifleri belirli bir belirli bir aralık. Biri teklifler için olmak üzere iki ayrı sorgu yapmak daha hızlı olurdu. alt eşiğin altında, üst eşiğin üzerindeki teklifler içinse başka bir tüm reklam gruplarını getirip diğer tüm reklam gruplarını göz ardı ederek emin olabilirsiniz.

Kodlama yaklaşımı Kod snippet'i
İki sorgu kullanma (önerilir)
var adGroups = []
var report = AdsApp.search(
    'SELECT ad_group.name, ad_group.cpc_bid_micros' +
    ' FROM ad_group WHERE ad_group.cpc_bid_micros < 1000000');

while (report.hasNext()) {
  var row = report.next();
  adGroups.push(row.adGroup);
}
var report = AdsApp.search(
    'SELECT ad_group.name, ad_group.cpc_bid_micros' +
    ' FROM ad_group WHERE ad_group.cpc_bid_micros > 2000000');

while (report.hasNext()) {
  var row = report.next();
  adGroups.push(row.adGroup);
}
Genel bir sorgudan filtreleme (önerilmez)
var adGroups = []
var report = AdsApp.search(
    'SELECT ad_group.name, ad_group.cpc_bid_micros' +
    ' FROM ad_group');

while (report.hasNext()) {
  var row = report.next();
  var cpcBidMicros = row.adGroup.cpcBidMicros;
  if (cpcBidMicros < 1000000 || cpcBidMicros > 2000000) {
    adGroups.push(row.adGroup);
  }
}

Reklam Yöneticisi (MM) komut dosyaları

Seri yürütme yerine generateInParallel'i tercih et

Yönetici hesapları için komut dosyası yazarken mümkün olduğunda seri yürütme yerine executeInParallel() kullanın. executeInParallel(), komut dosyanıza daha fazla işlem süresi (bir saate kadar) ve işlenen hesap başına 30 dakika (seri yürütme için birleştirilmiş 30 dakika yerine) verir. Daha fazla bilgi için sınırlar sayfamıza bakın.

E-tablolar

E-tabloları güncellerken toplu işlemleri kullanma

E-tabloları güncellerken, tek seferde bir hücreyi güncelleyen yöntemler yerine toplu işlem yöntemlerini (ör. getRange()) kullanmayı deneyin.

E-tabloda fraktalite deseni oluşturan aşağıdaki kod snippet'ini inceleyin.

Kodlama yaklaşımı Kod snippet'i
Tek bir çağrıda bir hücre aralığını güncelleme (önerilir)
var colors = new Array(100);
for (var y = 0; y < 100; y++) {
  xcoord = xmin;
  colors[y] = new Array(100);
  for (var x = 0; x < 100; x++) {
    colors[y][x] = getColor_(xcoord, ycoord);
    xcoord += xincrement;
  }
  ycoord -= yincrement;
}
sheet.getRange(1, 1, 100, 100).setBackgroundColors(colors);
Bir seferde bir hücreyi güncelleme (önerilmez)
var cell = sheet.getRange('a1');
for (var y = 0; y < 100; y++) {
  xcoord = xmin;
  for (var x = 0; x < 100; x++) {
    var c = getColor_(xcoord, ycoord);
    cell.offset(y, x).setBackgroundColor(c);
    xcoord += xincrement;
  }
  ycoord -= yincrement;
  SpreadsheetApp.flush();
}

Google E-Tablolar, değerleri önbelleğe alarak ikinci kod snippet'ini optimize etmeye çalışır ancak yapılan API çağrılarının sayısı nedeniyle ilk snippet'e kıyasla yine de düşük performans sağlar.