Best Practices

In diesem Dokument sind Best Practices aufgeführt, mit denen Sie die Leistung Ihrer Skripts verbessern können.

Anrufe an andere Dienste minimieren

Die Verwendung von JavaScript-Vorgängen in Ihrem Script ist wesentlich schneller als das Aufrufen anderer Dienste. Alles, was Sie mit Google Apps Script erledigen können, ist viel schneller als Aufrufe, bei denen Daten von Google-Servern oder einem externen Server abgerufen werden müssen, z. B. Anfragen an Google Tabellen, Google Docs, Google Sites, Google Übersetzer, UrlFetch usw. Ihre Scripts werden schneller ausgeführt, wenn Sie Möglichkeiten finden, die Aufrufe dieser Dienste zu minimieren.

Für die Zusammenarbeit geteilte Ablagen verwenden

Wenn Sie mit anderen Entwicklern an einem Script-Projekt arbeiten, können Sie gemeinsam an Apps Script-Projekten in geteilten Ablagen arbeiten. Die Dateien in einer geteilten Ablage gehören der Gruppe und nicht einzelnen Personen. Dies erleichtert die Entwicklung und Wartung des Projekts.

Batchvorgänge verwenden

Scripts müssen in der Regel Daten aus einer Tabelle lesen, Berechnungen ausführen und die Ergebnisse der Daten dann in eine Tabelle schreiben. Google Apps Script bietet bereits einige integrierte Optimierungen, z. B. den Vorab-Caching, um Daten abzurufen, die ein Script wahrscheinlich abrufen wird, und den Schreib-Caching, um Daten zu speichern, die wahrscheinlich festgelegt werden.

Sie können Scripts schreiben, um das integrierte Caching optimal zu nutzen, indem Sie die Anzahl der Lese- und Schreibvorgänge minimieren. Das Wechseln zwischen Lese- und Schreibbefehlen ist langsam. Um ein Script zu beschleunigen, lesen Sie alle Daten mit einem Befehl in ein Array ein, führen Sie alle gewünschten Vorgänge auf die Daten im Array aus und schreiben Sie die Daten mit einem Befehl aus.

Hier ist ein Beispiel, das Sie nicht befolgen oder verwenden sollten. Ein Skript verwendet den folgenden Code, um die Hintergrundfarben jeder Zelle in einem Tabellenraster mit 100 × 100 festzulegen. Dabei wird die Funktion getColorFromCoordinates() (nicht hier zu sehen) verwendet, um zu bestimmen, welche Farbe für jede Zelle verwendet werden soll:

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

Das Script ist ineffizient: Es durchläuft 100 Zeilen und 100 Spalten und schreibt nacheinander in 10.000 Zellen. Der Google Apps Script-Writeback-Cache kann helfen, da er am Ende jeder Zeile einen Writeback mit Flush erzwingt. Aufgrund des Cachings gibt es nur 100 Aufrufe an die Tabelle.

Der Code kann jedoch viel effizienter gestaltet werden, wenn die Aufrufe gruppiert werden. Hier sehen Sie eine Umschreibung, bei der der Zellenbereich in ein Array namens „Farben“ eingelesen wird, der Farbzuweisungsvorgang für die Daten im Array ausgeführt wird und die Werte im Array in die Tabelle geschrieben werden:

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

Die Ausführung des ineffizienten Codes dauert etwa 70 Sekunden. Der effiziente Code wird in nur einer Sekunde ausgeführt.

Vermeiden Sie Bibliotheken in Scripts mit vielen UI-Elementen

Bibliotheken sind eine praktische Möglichkeit, Code wiederzuverwenden. Sie erhöhen jedoch die Zeit, die zum Starten des Scripts benötigt wird, geringfügig. Diese Verzögerung ist bei relativ lang laufenden Scripts (z. B. einem Dienst-Script zum Bereinigen Ihrer Google Drive-Dateien) nicht wahrnehmbar. Bei clientseitigen HTML-Dienst-Benutzeroberflächen, die wiederholte, kurz laufende google.script.run-Aufrufe ausführen, wirkt sich die Verzögerung jedoch auf jeden Aufruf aus. Aus diesem Grund sollten Bibliotheken sparsam in Add-ons verwendet werden und es ist empfehlenswert, sie in Skripts zu vermeiden, die keine Add-on sind und viele google.script.run-Aufrufe ausführen.

Cache-Dienst verwenden

Mit dem Cache-Dienst können Sie Ressourcen zwischen Scriptausführungen im Cache speichern. Durch das Caching von Daten können Sie die Häufigkeit reduzieren, mit der die Daten abgerufen werden müssen. Angenommen, Sie haben einen RSS-Feed unter beispiel.de, der 20 Sekunden zum Abrufen benötigt, und möchten den Zugriff auf die durchschnittliche Anfrage beschleunigen. Im folgenden Beispiel wird gezeigt, wie Sie den Cache-Dienst verwenden, um den Zugriff auf diese Daten zu beschleunigen.

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

Sie müssen zwar weiterhin 20 Sekunden warten, wenn sich das Element nicht im Cache befindet, aber nachfolgende Zugriffe sind sehr schnell, bis das Element nach 25 Minuten aus dem Cache abläuft.