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. Uygun filtreleri uygulamak aşağıdaki avantajları sağlar:

  • 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 (önerilir)
var keywords = AdsApp.keywords()
    .withCondition('Clicks > 10')
    .forDateRange('LAST_MONTH')
    .get();
while (keywords.hasNext()) {
  var keyword = keywords.next();
  // Do work here.
}
Kodda 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.
  }
}

Yalnızca listeye filtre uygulamak için hesabınızdaki tüm anahtar kelimelerin listesini almaya çalıştığından ikinci yaklaşım önerilmez.

Kampanya hiyerarşisinde gezinmekten kaçının

Belirli bir düzeydeki öğeleri almak istediğinizde, kampanya hiyerarşisinin tamamını taramak yerine söz konusu düzeyde bir koleksiyon yöntemi kullanın. Bu yöntem daha basit olmasının yanı sıra çok daha iyi performans gösterir. Sistem, tüm kampanyaları ve reklam gruplarını gereksiz yere okumak 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ı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.
  }
}

Yalnızca reklamlar gerekli olduğu halde nesne hiyerarşisinin tamamını (kampanyalar, reklam grupları) getirmeye çalıştığı için ikinci yaklaşım önerilmez.

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.

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

Kodlama yaklaşımı Kod snippet'i
Uygun üst öğe erişim yöntemini kullanma (ö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.
    }
  }
}

Hesabınızdaki kampanya ve reklam grubu hiyerarşisinin tamamını getirdiği için ikinci yaklaşım önerilmez. Oysa yalnızca reklam grubunuzla ilişkili kampanya ve reklam gruplarının bir alt kümesine ihtiyacınız vardır. İ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 kullan

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

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

Kodlama yaklaşımı Kod snippet'i
Uygun üst düzey filtreleri kullanma (ö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, hesabınızdaki kampanya ve reklam grubu hiyerarşisini yinelediği için önerilmez. Oysa yalnızca belirli bir reklam grubuna ve bu grubun üst kampanyalarına ve reklam gruplarına ihtiyacınız vardır. İ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

Varlıkları filtrelerken varlıkları diğer alanlar yerine kimliklerine göre filtrelemek tercih edilir.

Aşağıda, bir kampanya seçen kod snippet'lerini görebilirsiniz.

Kodlama yaklaşımı Kod snippet'i
Kimliğe göre filtreleme (önerilir)
var campaign = AdsApp.campaigns()
    .withIds([12345])
    .get()
    .next();
Adı kullanarak 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 öğe seçerken mümkün olduğunda üst kimliklere göre filtreleyin. Bu, sonuçları filtrelerken sunucuların aldığı öğelerin listesini sınırlandırarak sorgularınızı hızlandırır.

Aşağıda, bir reklam grubunu kimliğine göre alan aşağıdaki kod snippet'ini inceleyin. Üst kampanya kimliğinin bilindiği varsayılır.

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

Her iki kod snippet'i de aynı sonuçları verse de 1. kod snippet'inde (CampaignId="54678") üst öğe kimliği kullanılarak yapılan ek filtreleme, sunucunun sonuçları filtrelerken iterasyon yapması gereken öğelerin listesini kısıtlayarak kodu daha verimli hale getirir.

Ç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.

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

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ğlar ancak seçicinizdeki koşulların sayısı arttıkça ikinci yaklaşım daha karmaşık kod oluşturma eğilimindedir. Ayrıca, etiketi yeni bir öğeye uygulamak, komut dosyasını yeni bir öğe içerecek şekilde düzenlemekten daha kolaydır.

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ı kötüleşir:

  • 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, varlıklara bir etiket uygulamak ve ardından LabelId'ye göre filtre uygulamak 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 koşulunu 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ı 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üncellenen öğeleri sıkı bir döngüde alma (ö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 aynı anda yalnızca bir işlem yürütmeye zorladığından ikinci yaklaşım önerilmez. İlk yaklaşım, ikinci yaklaşıma benzer şekilde, getCpc() çağrısının setCpc() çağrıldığı çevrimden ayrı bir döngüde yapılması nedeniyle, toplu işlemeyi destekleme avantajına sahiptir.

Mümkün olduğunda oluşturucuları kullanın

Google Ads komut dosyaları, yeni nesne oluşturmanın iki yolunu destekler: oluşturucular ve oluşturma yöntemleri. Oluşturucular, API çağrısından oluşturulan nesneye erişim sağladığı için oluşturma yöntemlerinden daha esnektir.

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

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 kelimeyi alma işleminde ek seçim işleminin yer alması nedeniyle ikinci yaklaşım tercih edilmez. Ayrıca, oluşturma yöntemleri de kullanımdan kaldırıldı.

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

Aşağıdaki kod snippet'lerini inceleyin. Bu snippet'ler bir anahtar kelime listesi oluşturur 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 yaygın olarak yaptıkları bir görev, mevcut performans değerlerine göre raporlar çalıştırmak ve öğe özelliklerini (örneğin, anahtar kelime teklifleri) güncellemektir. Çok sayıda öğeyi güncellemeniz gerektiğinde toplu yüklemeler daha iyi performans sağlar. Örneğin, son bir aydaki TopImpressionPercentage > 0.4 değeri 100'ün üzerinde olan anahtar kelimelerin MaxCpc değerini artıran aşağıdaki komut dosyalarını inceleyin:

Kodlama yaklaşımı Kod snippet'i
Toplu yükleme özelliğini kullanma (ö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 oldukça iyi bir performans sunsa da bu durumda ilk yaklaşım tercih edilir.

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

  • Toplu yüklemeler, hem güncelleyebileceği varlık sayısı hem de genel yürütme süresi açısından daha yüksek sınırlara sahiptir.

Toplu yüklemelerinizi kampanyalara göre gruplandırma

Toplu yüklemelerinizi oluştururken işlemlerinizi üst kampanyaya göre gruplamaya çalışın. Bu, verimliliği artırır ve çakışan 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 reklam grubundaki reklamları duraklatır, 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. Bu durumda sistem, üst öğeyi (paylaşılan reklam grubu veya kampanya) kilitler. Bu da 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. Bu nedenle, en basit yöntem, 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 ç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 almak için raporları kullanma

Ç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ını aşmaz.

Geçen ay 50'den fazla tıklama alan tüm anahtar kelimelerin Tıklama Sayısı, Gösterim Sayısı, Maliyet ve Metin bilgilerini 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 kelimeleri yinelemesi ve her seferinde bir varlığa ait istatistikleri alması nedeniyle tercih edilmez. Tüm verileri tek bir aramada getirdiği ve gerektiğinde akışla aktardığı için bu durumda raporlar daha hızlı performans gösterir. Ayrıca, ikinci yaklaşımda alınan anahtar kelimeler, komut dosyanızın get() çağrısı kullanılarak alınan varlık sayısı kotasına dahil edilir.

Rapor yerine aramayı kullanma

Rapor yöntemi, eski altyapı için oluşturulmuştur ve GAQL kullanıyor olsanız bile sonuçları düz bir biçimde gösterir. Bu, sorgunun sonuçlarını eski stille eşleşecek ş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 arama işlevini kullanmanızı öneririz.

AWQL yerine GAQL'yi tercih etme

AWQL, rapor sorgularında ve withCondition çağrılarında hâlâ desteklenmesine rağmen gerçek AWQL ile tam uyumlu olmayan bir çeviri katmanı üzerinden çalıştırılır. 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ı sunuyoruz.

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

Raporların (ve seçicilerin) yürütme hızı, yineleme 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, 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 aralığın dışında olan reklam gruplarını bulmak istediğinizi varsayalım. Biri alt eşiğin altındaki teklifler, diğeri de üst eşiğin üzerindeki teklifler için olmak üzere iki ayrı sorgu yapmak, tüm reklam gruplarını getirip ilgilenmediğinizleri yoksaymaktan daha hızlı olur.

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);
  }
}

Ad Manager (MM) komut dosyaları

Seri yürütme yerine executeInParallel'ı tercih edin

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 dakikaya kadar süre (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 (örneğin, 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.