Best Practices

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

Aufrufe anderer Dienste minimieren

Die Verwendung von JavaScript-Vorgängen innerhalb Ihres Skripts ist erheblich schneller als das Aufrufen anderer Dienste. Alle Schritte, die Sie in Google Apps Script selbst ausführen können, sind wesentlich schneller als Aufrufe, die Daten von Google-Servern oder einem externen Server abrufen müssen, 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

Wenn Sie gemeinsam mit anderen Entwicklern an einem Skriptprojekt arbeiten, können Sie über geteilte Ablagen an Apps Script-Projekten zusammenarbeiten. Dateien in einer geteilten Ablage gehören nicht einzelnen einzelnen Personen, sondern der Gruppe. Dies erleichtert die Entwicklung und Pflege des Projekts.

Batchvorgänge verwenden

Skripts müssen häufig Daten aus einer Tabelle einlesen, Berechnungen durchführen und dann die Ergebnisse der Daten in eine Tabellenkalkulation schreiben. Google Apps Script verfügt bereits über einige integrierte Optimierungsmöglichkeiten, wie z. B. die Verwendung von Look-Ahead-Caching, um abzurufen, was ein Skript wahrscheinlich erhalten wird, und schreibt Caching, um zu speichern, was wahrscheinlich festgelegt wird.

Sie können Skripts schreiben, um das integrierte Caching optimal zu nutzen, indem Sie die Anzahl der Lese- und Schreibvorgänge minimieren. Abwechselnde Lese- und Schreibbefehle sind langsam. Zur Beschleunigung eines Skripts lesen Sie alle Daten mit einem Befehl in ein Array ein, führen alle Vorgänge an den Daten im Array aus und schreiben 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 für jede Zelle in einem Tabellenraster mit einer Größe von 100 x 100 festzulegen. Mit der Funktion getColorFromCoordinates() (hier nicht dargestellt) wird bestimmt, 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-Cache für das Zurückschreiben erzwingt mithilfe von Leerung am Ende jeder Zeile ein Zurückschreiben. Aufgrund des Cachings sind nur 100 Aufrufe der Tabelle möglich.

Der Code kann jedoch viel effizienter werden, indem die Aufrufe in Stapeln zusammengefasst werden. Hier sehen Sie eine Umschreibung, bei der der Zellenbereich in ein Array mit dem Namen „Farben“ eingelesen wird, die Farbzuweisungsoperation für die Daten im Array durchgeführt und die Werte im Array in die Tabelle ausgeschrieben 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 läuft in nur 1 Sekunde!

Vermeiden Sie Bibliotheken in Skripts mit vielen UI-Elementen.

Bibliotheken sind eine bequeme Möglichkeit, Code wiederzuverwenden. Sie verlängern jedoch etwas länger zum Starten des Skripts. Bei Skripts mit relativ langer Laufzeit (z. B. einem Dienstprogramm zum Bereinigen von Google Drive-Dateien) ist diese Verzögerung nicht bemerkbar. Bei clientseitigen HTML-Dienstoberflächen, die wiederholte, kurz andauernde google.script.run-Aufrufe ausführen, wirkt sich die Verzögerung jedoch auf jeden Aufruf aus. Aufgrund dieses Problems sollten Bibliotheken in Add-ons sparsam verwendet werden und in Nicht-Add-on-Skripts, die viele google.script.run-Aufrufe ausführen, unter Umständen vermieden werden.

Cache-Dienst verwenden

Sie können den Cache-Dienst verwenden, um Ressourcen zwischen Skriptausführungen im Cache zu speichern. Durch das Caching von Daten können Sie die Häufigkeit oder Häufigkeit reduzieren, mit der Sie die Daten abrufen müssen. Angenommen, Sie haben einen RSS-Feed auf example.com, der 20 Sekunden benötigt, um den Zugriff auf die durchschnittliche Anfrage zu beschleunigen. 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 immer noch 20 Sekunden warten, wenn sich das Element nicht im Cache befindet, nachfolgende Zugriffe sind jedoch sehr schnell, bis das Element in 25 Minuten aus dem Cache entfernt ist.