Best Practices

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

Anrufe bei anderen Diensten 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 selbst erledigen können, ist viel schneller als Aufrufe, die Daten von Google-Servern oder einem externen Server abrufen müssen, wie z. B. Anfragen an Google Tabellen, Google Docs, Google Sites, Google Übersetzer, UrlFetch usw. Ihre Skripts werden schneller ausgeführt, wenn Sie Möglichkeiten finden, die Aufrufe der Skripts an diese Dienste zu minimieren.

Über geteilte Ablagen zusammenarbeiten

Falls Sie zusammen mit anderen Entwicklern an einem Skriptprojekt arbeiten, können Sie mit geteilten Ablagen an Apps Script-Projekten zusammenarbeiten. Dateien in einer geteilten Ablage gehören der Gruppe, nicht einzelnen Personen. Dies erleichtert die Entwicklung und Verwaltung des Projekts.

Batchvorgänge verwenden

Skripts müssen häufig Daten aus einer Tabellenkalkulation einlesen, Berechnungen durchführen und die Ergebnisse der Daten dann in eine Tabellenkalkulation schreiben. Google Apps Script verfügt bereits über eine integrierte Optimierung. So wird beispielsweise mithilfe von Look-Ahead-Caching ermittelt, was ein Skript voraussichtlich erhalten wird, und speichert im Cache gespeicherte Daten, um die wahrscheinlich festzulegenden Elemente zu speichern.

Sie können Skripts schreiben, um das integrierte Caching maximal zu nutzen, indem Sie die Anzahl der Lese- und Schreibvorgänge minimieren. Abwechselnde Lese- und Schreibbefehle sind langsam. Um ein Skript zu beschleunigen, lesen Sie alle Daten mit einem Befehl in ein Array, führen Sie alle Vorgänge mit den Daten im Array aus und schreiben Sie die Daten mit einem einzigen 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 von 100 × 100 festzulegen. Dabei wird die Funktion getColorFromCoordinates() (hier nicht gezeigt) 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 Skript ist ineffizient: Es durchläuft 100 Zeilen und 100 Spalten und schreibt nacheinander in 10.000 Zellen. Der Google Apps Script-Rückschreibecache hilft, da er mit Leerung am Ende jeder Zeile ein Zurückschreiben erzwingt. Aufgrund des Cachings gibt es nur 100 Aufrufe an die Tabelle.

Der Code kann jedoch viel effizienter gemacht werden, indem die Aufrufe in Batches zusammengefasst 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).setBackgroundColors(colors);

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

Bibliotheken in Skripts mit vielen UI-lasten vermeiden

Bibliotheken sind eine bequeme Möglichkeit, Code wiederzuverwenden, verlängern jedoch die Zeit für den Start des Skripts etwas. Bei Skripts mit relativ langer Ausführungszeit (z. B. Dienstprogrammskripts zum Bereinigen Ihrer Google Drive-Dateien) ist diese Verzögerung nicht wahrnehmbar. Bei clientseitigen Benutzeroberflächen des HTML Service, die wiederholte, kurze 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. Möglicherweise ist es auch sinnvoll, 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 Skriptausführungen im Cache speichern. Durch das Caching von Daten können Sie die Anzahl oder Häufigkeit reduzieren, mit der Sie die Daten abrufen müssen. Stellen Sie sich ein Szenario vor, bei dem Sie einen RSS-Feed auf example.com haben, dessen Abruf 20 Sekunden dauert, und Sie den Zugriff für die durchschnittliche Anfrage beschleunigen möchten. Das folgende Beispiel zeigt, 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 noch 20 Sekunden warten, wenn sich das Element nicht im Cache befindet, aber nachfolgende Zugriffe erfolgen sehr schnell, bis das Element nach 25 Minuten aus dem Cache abläuft.