En İyi Uygulamalar

Bu belgede, komut dosyalarınızın performansını artırmanıza yardımcı olacak en iyi uygulamalar listelenmiştir.

Diğer hizmetlere yapılan aramaları en aza indirin

Komut dosyanızda JavaScript işlemlerini kullanmak, diğer hizmetleri çağırmaktan çok daha hızlıdır. Google Apps Komut Dosyası'nda yapabileceğiniz her işlem, Google'ın sunucularından veya harici bir sunucudan veri getirmesi gereken çağrılar yapmaktan (ör. E-Tablolar, Dokümanlar, Sites, Çeviri, URLfetch isteklerini gönderme vb.) çok daha hızlıdır. Komut dosyalarının bu hizmetlere yaptığı çağrıları en aza indirmenin yollarını bulabilirseniz komut dosyalarınız daha hızlı çalışır.

Ortak Drive'larla ortak çalışmayı düşünün

Diğer geliştiricilerle bir komut dosyası projesi üzerinde çalışıyorsanız paylaşılan sürücülerle Apps Komut Dosyası projelerinde ortak çalışabilirsiniz. Ortak Drive'daki dosyalar bir kişiye değil gruba aittir. Bu, projenin geliştirilmesini ve bakımını kolaylaştırır.

Toplu işlemleri kullanma

Komut dosyalarının genellikle bir e-tablodan veri okuması, hesaplamalar yapması ve ardından verilerin sonuçlarını bir e-tabloya yazması gerekir. Google Apps Komut Dosyası'nda, bir komut dosyasının olası olarak alacağı verileri almak için önizleme önbelleğe alma ve ayarlanabilecek verileri kaydetmek için yazma önbelleğe alma gibi bazı yerleşik optimizasyonlar zaten mevcuttur.

Okuma ve yazma sayısını en aza indirerek yerleşik önbelleğe alma özelliğinden en iyi şekilde yararlanmak için komut dosyaları yazabilirsiniz. Okuma ve yazma komutlarını dönüşümlü olarak kullanmak yavaştır. Bir komutla tüm verileri bir diziye okuyun, dizindeki veriler üzerinde tüm işlemleri gerçekleştirin ve verileri tek bir komutla yazın. Böylece komut dosyasını hızlandırabilirsiniz.

Aşağıda, takip etmemeniz veya kullanmamanız gereken bir örnek verilmiştir. Bir komut dosyası, 100 x 100 e-tablo ızgarasındaki her hücrenin arka plan renklerini ayarlamak için aşağıdaki kodu kullanır. Her hücre için hangi rengin kullanılacağını belirlemek üzere getColorFromCoordinates() adlı işlevi (burada gösterilmemiştir) kullanır:

  // DO NOT USE THIS CODE. It is an example of SLOW, INEFFICIENT code.
  // FOR DEMONSTRATION ONLY
  var cell = sheet.getRange('a1');
  for (var y = 0; y < 100; y++) {
    xcoord = xmin;
    for (var x = 0; x < 100; x++) {
      var c = getColorFromCoordinates(xcoord, ycoord);
      cell.offset(y, x).setBackgroundColor(c);
      xcoord += xincrement;
    }
    ycoord -= yincrement;
    SpreadsheetApp.flush();
  }

Komut dosyası verimsizdir: 100 satır ve 100 sütunda döngü yaparak 10.000 hücreye art arda yazar. Google Apps Komut Dosyası'ndaki geri yazma önbelleği, her satırın sonunda flush kullanılarak geri yazma işlemini zorunlu kıldığından faydalıdır. Önbelleğe alma nedeniyle E-Tablo'ya yalnızca 100 çağrı yapılır.

Ancak çağrılar gruplandırılarak kod çok daha verimli hale getirilebilir. Aşağıda, hücre aralığının colors adlı bir diziye okunduğu, renk atama işleminin dizindeki veriler üzerinde gerçekleştirildiği ve dizindeki değerlerin elektronik tabloya yazıldığı bir yeniden yazma örneği verilmiştir:

  // OKAY TO USE THIS EXAMPLE or code based on it.
  var cell = sheet.getRange('a1');
  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] = getColorFromCoordinates(xcoord, ycoord);
      xcoord += xincrement;
    }
    ycoord -= yincrement;
  }
  sheet.getRange(1, 1, 100, 100).setBackgrounds(colors);

Verimli olmayan kodun çalışması yaklaşık 70 saniye sürer. Verimli kod yalnızca 1 saniyede çalışır.

Kullanıcı arayüzü yoğun komut dosyalarında kitaplıklardan kaçının

Kütüphaneler, kodu yeniden kullanmanın kullanışlı bir yoludur ancak komut dosyasının başlatılması için gereken süreyi biraz artırır. Bu gecikme, nispeten uzun süre çalışan komut dosyalarında (ör. Google Drive dosyalarınızı temizleyen bir yardımcı program komut dosyası) fark edilmez ancak tekrarlanan, kısa süreli google.script.run çağrıları yapan istemci tarafı HTML Hizmeti kullanıcı arayüzlerinde her çağrıyı etkiler. Bu sorun nedeniyle, kitaplıklar eklentilerde az miktarda kullanılmalıdır. Ayrıca, çok sayıda google.script.run çağrısı yapan eklenti dışı komut dosyalarında kitaplıklardan kaçınabilirsiniz.

Önbellek hizmetini kullanma

Komut dosyası çalıştırmaları arasında kaynakları önbelleğe almak için Önbellek Hizmeti'ni kullanabilirsiniz. Verileri önbelleğe alarak verileri getirmeniz gereken kez sayısını veya sıklığını azaltabilirsiniz. example.com adresinde, getirilmesinin 20 saniye sürdüğü bir RSS özet akışınız olduğunu ve ortalama isteklerde erişimi hızlandırmak istediğinizi varsayalım. Aşağıdaki örnekte, bu verilere erişimi hızlandırmak için Önbellek Hizmeti'nin nasıl kullanılacağı gösterilmektedir.

  function getRssFeed() {
    var cache = CacheService.getScriptCache();
    var cached = cache.get("rss-feed-contents");
    if (cached != null) {
      return cached;
    }
    // This fetch takes 20 seconds:
    var result = UrlFetchApp.fetch("http://example.com/my-slow-rss-feed.xml");
    var contents = result.getContentText();
    cache.put("rss-feed-contents", contents, 1500); // cache for 25 minutes
    return contents;
  }

Öğe önbellekte değilse 20 saniye beklemeniz gerekir. Ancak öğenin önbellekten süresi dolana kadar (25 dakika) sonraki erişimler çok hızlı olur.