En İyi Uygulamalar

Bu sayfada, Google Ads komut dosyalarıyla geliştirme yapmaya yönelik çeşitli en iyi uygulamalar ele alınmaktadır.

Seçiciler

Seçicilerle filtre

Mümkün olduğunda yalnızca ihtiyacınız olan varlıkları istemek için filtreleri kullanın. Doğru filtreleri uygulamak şu avantajları sağlar:

  • Bu kod daha basit ve anlaşılması daha kolay.
  • Komut dosyası çok daha hızlı yürütülür.

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

Kodlama yaklaşımı Kod snippet'i
Seçicileri kullanarak filtrele (önerilir)
var keywords = AdsApp.keywords()
    .withCondition('Clicks > 10')
    .forDateRange('LAST_MONTH')
    .get();
while (keywords.hasNext()) {
  var keyword = keywords.next();
  // Do work here.
}
Kod 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, hesabınızdaki tüm anahtar kelimelerin listesini yalnızca listeye filtre uygulamak için almaya çalıştığından önerilmez.

Kampanya hiyerarşisinde gezinmekten kaçının.

Belirli bir düzeydeki varlıkları almak istediğinizde, tüm kampanya hiyerarşisinde gezinmek yerine o düzeyde bir toplama yöntemi kullanın. Bu yöntem, daha basit olmanın yanı sıra çok daha iyi performans gösterir: Sistem, tüm kampanyalar ve reklam gruplarında gereksiz okumalar yapmak zorunda kalmaz.

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 (Önerilir)

var ads = AdsApp.ads();

Hiyerarşide gezin (Ö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, nesnelerin (kampanyalar, reklam grupları) hiyerarşilerinin tamamını getirmeye çalıştığı için önerilmez, ancak yalnızca reklamlar gerekir.

Belirli üst erişimci yöntemlerini kullanma

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

Geçen ay 50'den fazla tıklama almış metin reklamlara sahip reklam gruplarını alan aşağıdaki kod snippet'lerini karşılaştırın:

Kodlama yaklaşımı Kod snippet'i
Uygun üst erişimci yöntemini kullanın (ö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şide gezin (ö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, hesabınızdaki kampanyanın tamamını ve reklam grubu hiyerarşilerini getirdiğinden önerilmez. Ancak, reklam grubunuzla ilişkilendirilmiş yalnızca bir kampanya ve reklam grubu alt kümesine ihtiyacınız olur. İlk yaklaşım, kendisini yalnızca alakalı reklam koleksiyonunu getirecek şekilde kısıtlar ve üst nesnelerine erişmek için uygun bir yöntem kullanır.

Belirli üst filtreler kullan

Belirli bir kampanya veya reklam grubundaki varlıklara erişmek için, verileri getirdikten sonra bir hiyerarşide dolaşmak yerine seçicide belirli bir filtre kullanın.

Belirli bir kampanya ile geçen ay 50'den fazla tıklama alan reklam grubundaki metin reklamların listesini alan aşağıdaki kod snippet'lerini karşılaştırın.

Kodlama yaklaşımı Kod snippet'i
Ebeveyn düzeyinde uygun 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şide gezin (ö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, hesabınızdaki kampanya ve reklam grubu hiyerarşisinde yinelendiği için önerilmez. Ancak, yalnızca seçili bir reklam grubuna ve üst kampanyaları ile reklam gruplarına ihtiyacınız olur. İlk yaklaşım, seçicideki ana varlıklar için belirli bir filtre uygulayarak yinelemeyi reklam listesiyle sınırlar.

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

Varlıklar için filtre uygulanırken varlıkları diğer alanlar yerine kimliklerine göre filtrelemeniz tercih edilir.

Bir kampanyayı seçen aşağıdaki kod snippet'lerini düşünün.

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

İkinci yaklaşım, kimlik olmayan bir alana göre filtreleme yaptığımız için daha az optimum olur.

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

Varlık seçerken, mümkün olduğunda üst kimliklere göre filtreleyin. Bu sayede, sonuçları filtrelerken sunucular tarafından alınan varlıkların listesini sınırlayarak sorgularınızı hızlandırabilirsiniz.

Bir Reklam Grubunu kimliğine göre alan aşağıdaki kod snippet'ini düşünün. Üst kampanya kimliğinin bilindiğini varsayın.

Kodlama yaklaşımı Kod snippet'i
Kampanya ve reklam grubu kimliklerine göre filtrele (ö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ı sağlasa da, kod snippet'i 1'de (CampaignId="54678") üst kimliği kullanılarak yapılan ek filtreleme, sunucunun sonuçları filtrelerken yinelemesi gereken varlıkların listesini kısıtlayarak kodu daha verimli hale getirir.

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

Çok fazla filtreleme koşulunuz olduğunda işlediğiniz varlıklar için bir etiket oluşturmak ve varlıklarınızı filtrelemek için bu etiketi kullanmak iyi bir fikirdir.

Adlarına göre bir kampanya listesi alan aşağıdaki kod snippet'ini ele alalım.

Kodlama yaklaşımı Kod snippet'i
Etiket kullanın (ö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 size benzer performans düzeyi sağlasa da ikinci yaklaşım, seçicinizdeki koşulların sayısı arttıkça daha karmaşık kod oluşturma eğilimindedir. Etiketi yeni bir öğeye uygulamak, komut dosyasını yeni bir öğe içerecek şekilde düzenlemekten de daha kolaydır.

IN yan tümcenizdeki koşul sayısını sınırlayın

Komut dosyalarını çalıştırırken yaygın bir kullanım örneği, varlıklar listesi için bir rapor çalıştırmaktır. Geliştiriciler bunu genellikle IN ifadesi 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 işe yarar. Ancak, sorgunuzun uzunluğu arttıkça komut dosyanızın performansı iki nedenden dolayı düşer:

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

Bu tür durumlarda, öğelere bir etiket uygulanması ve ardından LabelId öğesine göre filtreleme yapılması tercih edilir.

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 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 varlığında değişiklik yaptığınızda Google Ads komut dosyaları değişikliği hemen yürütmez. Bunun yerine, birden fazla değişikliği gruplar halinde birleştirmeye çalışır. Böylece birden fazla değişiklik yapan tek bir istek gönderebilir. Bu yaklaşım, komut dosyalarınızı hızlandırır ve Google Ads sunucularının yükünü azaltır. Ancak Google Ads komut dosyalarını sık sık işlem yapmaya 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ı inceleyin.

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ü halinde 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());
}

keyword.bidding().getCpc() çağrısı, Google Ads komut dosyalarını setCpc() işlemini temizlemeye ve tek seferde yalnızca bir işlem yürütmeye zorladığı için ikinci yaklaşım önerilmez. İlk yaklaşım, ikinci yaklaşıma benzer olmakla birlikte, getCpc() çağrısı setCpc() çağrısından ayrı bir döngüde yapıldığı için toplu işlemi destekleme avantajına sahiptir.

Mümkünse oluşturucuları kullanın

Google Ads komut dosyaları, yeni nesneler oluşturmak için iki yöntemi destekler: oluşturucular ve oluşturma yöntemleri. Derlemeler, API çağrısından oluşturulan nesneye erişmenizi sağladığı için oluşturma yöntemlerine göre daha esnektir.

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

Kodlama yaklaşımı Kod snippet'i
Oluşturucuları kullanma (ö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();

Anahtar kelime alınırken fazladan seçim yapılması nedeniyle ikinci yaklaşım tercih edilmez. Ayrıca, oluşturma yöntemleri de kullanımdan kaldırıldı.

Ancak, içerik oluşturucuların yanlış kullanıldığında Google Ads komut dosyalarının işlemlerini toplu olarak gerçekleştirmesini engelleyebileceğini unutmayın.

Bir anahtar kelime listesi oluşturan ve yeni oluşturulan anahtar kelimelerin kimliğini yazdıran aşağıdaki kod snippet'lerini ele alalım:

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üncellenmiş öğeleri sıkı bir döngü halinde alın (ö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() yöntemini çağırarak Google Ads komut dosyalarını her defasında bir işlem yürütmeye zorladığı için tercih edilmez. İlk yaklaşım benzer olmakla birlikte, transaction.getResult() öğesini oluşturulduğu yerden farklı bir döngüde çağırdığımız için toplu işleme izin verir.

Büyük güncellemeler için toplu yüklemeleri kullanmayı düşünün

Geliştiricilerin gerçekleştirdiği yaygın bir görev, raporlar çalıştırmak ve öğe özelliklerini (örneğin, anahtar kelime teklifleri) mevcut performans değerlerine dayalı olarak güncellemektir. Çok sayıda öğeyi güncellemeniz gerektiğinde toplu yüklemeler genellikle daha iyi performans sağlar. Örneğin, geçen ay TopImpressionPercentage > 0.4 olan anahtar kelimelerin Maks. TBM'sini artıran aşağıdaki komut dosyalarını göz önünde bulundurun:

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çme ve güncelleme (daha az optimum)
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 size oldukça iyi bir performans sağlasa da bu durumda ilk yaklaşım

  • Google Ads komut dosyaları, tek bir çalıştırmada alınabilecek veya güncellenebilecek nesne sayısıyla ilgili bir sınıra sahiptir ve ikinci yaklaşımdaki seçme ve güncelleme işlemleri bu sınıra dahil edilir.

  • Toplu yüklemelerin hem güncelleyebileceği öğe sayısı hem de toplam yürütme süresi açısından daha yüksek sınırları vardır.

Toplu yüklemelerinizi kampanyalara göre gruplandırın

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

Birbirine paralel çalışan iki toplu yükleme görevi düşünün. Biri, bir reklam grubundaki reklamları duraklatır, diğeri anahtar kelime tekliflerini ayarlar. İşlemler alakalı olmasa da, aynı reklam grubu (veya aynı kampanya altındaki iki farklı reklam grubu) altındaki varlıklar için geçerli olabilir. Bu olduğunda, sistem üst varlığı (paylaşılan reklam grubu veya kampanya) kilitleyerek toplu yükleme görevlerinin birbirini engellemesine neden olur.

Google Ads komut dosyaları, tek bir toplu yükleme görevi içinde yürütmeyi optimize edebilir. Böylece, yapılacak en basit şey, hesap başına aynı anda yalnızca bir toplu yükleme görevi çalıştırmaktır. Hesap başına birden fazla toplu yükleme yapmaya karar verirseniz toplu yüklemelerin optimum performans için karşılıklı olarak birbirini dışlayan kampanyalar listesinde (ve alt varlıklarında) çalıştığından emin olun.

Raporlama

İstatistikleri getirmek için raporları kullanma

Büyük miktarlarda öğeyi ve istatistiklerini almak istediğinizde, standart AdsApp yöntemleri yerine raporları kullanmak genellikle daha iyidir. Aşağıdaki nedenlerden dolayı raporların kullanılması 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 Sayısı, Gösterim Sayısı, Maliyeti ve Metni'ni 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 kullanma (ö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 kelimeler üzerinde yinelendiği ve her defasında bir varlıktaki istatistikleri aldığı için tercih edilmez. Bu durumda raporlar daha hızlı çalışır, çünkü tüm verileri tek bir çağrıda getirir ve gerektiğinde akış olarak kullanır. Ayrıca, ikinci yaklaşımda alınan anahtar kelimeler, get() çağrısı kullanılarak alınan varlık sayısı için komut dosyanızın kotasına dahil edilir.

Bildirim yerine aramayı kullan

Rapor yöntemi eski altyapı için oluşturulmuştur ve GAQL kullanıyor olsanız bile sonuçları düz bir biçimde verir. Bu, sorgunun sonuçlarını eski stile uyacak şekilde dönüştürmesi gerektiği anlamına gelir. Eski stil tüm alanlar için desteklenmez ve her çağrıya ek yük getirir.

Yeni Google Ads API raporlamasının tüm özelliklerinden yararlanmak için bunun yerine aramayı kullanmanızı öneririz.

GAQL'den AWQL'ye tercih et

AWQL hâlâ rapor sorgularında ve withCondition çağrılarında desteklense de gerçek AWQL ile tam uyumlu olmayan bir çeviri katmanından çalıştırılır. Sorgularınız üzerinde tam kontrole sahip 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ı'ndan yararlanabilirsiniz.

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

Raporların (ve seçicilerin) yürütme hızı, iterasyonlar yapıp yapmadığınıza bakılmaksızın rapor tarafından döndürülecek toplam satır sayısına bağlıdır. Bu nedenle, kullanım alanınıza uyacak şekilde sonuç kümesini mümkün olduğunca küçültmek için her zaman özel filtreler kullanmanız gerekir.

Örneğin, teklifleri belirli bir aralığın dışında olan reklam gruplarını bulmak istediğinizi varsayalım. Biri alt eşiğin altındaki teklifler, diğeri üst eşiğin üzerindeki teklifler için olmak üzere iki ayrı sorgu yapmak, tüm reklam gruplarını getirip ilgilenmediklerinizi göz ardı etmekten daha hızlı olur.

Kodlama yaklaşımı Kod snippet'i
İki sorgu kullanın (ö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 sorguya göre 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 voiceInParallel'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şleme süresi (en fazla bir saat) ve işlenen her hesap için 30 dakikaya kadar süre verir (seri yürütme için toplam 30 dakika yerine). Daha fazla ayrıntı için sınırlar sayfamıza bakın.

E-tablolar

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

E-tabloları güncellerken, her defasında bir hücreyi güncelleyen yöntemler yerine toplu işlem yöntemlerini (örneğin, getRange()) kullanmaya çalışın.

Bir e-tabloda fraktal bir kalıp oluşturan aşağıdaki kod snippet'ini düşünün.

Kodlama yaklaşımı Kod snippet'i
Tek bir çağrıda 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);
Tek 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ışsa da yapılan API çağrısı sayısı nedeniyle ilk snippet'e kıyasla düşük performans sağlar.