Best Practices

In diesem Dokument finden Sie Best Practices, mit denen Sie die Leistung Ihrer Scripts 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 in Google Apps Script selbst erledigen können, ist viel schneller als Aufrufe, bei denen Daten von den Servern von Google oder einem externen Server abgerufen werden müssen, z. B. Anfragen an Google Tabellen, Google Docs, Google Sites, Google Translate oder UrlFetch. 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 Apps Script-Projekte in geteilten Ablagen gemeinsam bearbeiten. 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, dem Sie nicht folgen oder es verwenden sollten. In einem Script wird mit dem folgenden Code die Hintergrundfarbe jeder Zelle in einem Tabellenraster mit 100 × 100 Zellen festgelegt. 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 werden nur 100 Aufrufe an die Tabelle gesendet.

Der Code kann jedoch viel effizienter gestaltet werden, wenn die Aufrufe gruppiert werden. Hier ist eine Neufassung, bei der der Zellenbereich in ein Array namens „colors“ gelesen, die Farbzuweisung auf die Daten im Array ausgeführt 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 verlängern jedoch die Zeit, die zum Starten des Scripts benötigt wird. 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 in Add-ons sparsam verwendet werden. In Scripts, die keine Add-ons sind und viele google.script.run-Aufrufe ausführen, sollten sie vermieden werden.

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 Sie 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 immer noch 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.