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ı verilerini almak için önizleme önbelleği ve ayarlanabilecek olası verileri kaydetmek için yazma önbelleği 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 ölçülü bir şekilde kullanılmalıdır. Ayrıca, çok sayıda google.script.run
çağrısı yapan eklenti olmayan komut dosyalarında bunlardan kaçınmak isteyebilirsiniz.
Ö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, getirme işleminin 20 saniye sürdüğü bir RSS özet akışınız olduğunu ve ortalama istekteki 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;
}
Şimdi, öğe önbellekte değilse 20 saniye beklemeniz gerekse de sonraki erişimler, öğenin süresi 25 dakika içinde önbellekten geçene kadar çok hızlı olacaktır.