Best Practices

In diesem Dokument finden Sie Best Practices, mit denen Sie die Leistung Ihrer Skripts verbessern können.

Aufrufe anderer Dienste minimieren

Die Verwendung von JavaScript-Vorgängen in Ihrem Skript ist wesentlich schneller als der Aufruf anderer Dienste. Alles, was Sie in Google Apps Script selbst erledigen können, geht viel schneller als Aufrufe, bei denen Daten von den Google-Servern oder einem externen Server abgerufen werden müssen, z. B. Anfragen an Sheets, Docs, Sites, Translate, UrlFetch usw. Ihre Skripts werden schneller ausgeführt, wenn Sie die Anzahl der Aufrufe, die die Skripts an diese Dienste senden, minimieren.

Zusammenarbeit mit geteilten Ablagen

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

Batchvorgänge verwenden

In der Regel müssen in Skripts Daten aus einer Tabelle gelesen, Berechnungen durchgeführt und die Ergebnisse der Daten in eine Tabelle geschrieben werden. Google Apps Script bietet bereits einige integrierte Optimierungen, z. B. die Verwendung von Look-Ahead-Caching, um abzurufen, was ein Skript wahrscheinlich abrufen wird, und Write-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. Das abwechselnde Senden von Lese- und Schreibbefehlen ist langsam. Um ein Skript zu beschleunigen, sollten Sie alle Daten mit einem Befehl in ein Array einlesen, alle Vorgänge für die Daten im Array ausführen und die Daten mit einem Befehl ausgeben.

Hier ist ein Beispiel, das Sie nicht verwenden sollten: In einem Skript wird der folgende Code verwendet, um die Hintergrundfarben jeder Zelle in einem 100 × 100-Tabellengitter festzulegen. Dazu wird eine Funktion namens getColorFromCoordinates() verwendet (hier nicht dargestellt), um die Farbe für jede Zelle zu bestimmen:

  // 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, da es 100 Zeilen und 100 Spalten durchläuft und nacheinander in 10.000 Zellen schreibt. Der Google Apps Script-Write-Back-Cache hilft, da am Ende jeder Zeile ein Write-Back mit „flush“ erzwungen wird. Aufgrund des Caching werden nur 100 Aufrufe an die Tabelle gesendet.

Der Code lässt sich jedoch durch das Bündeln der Aufrufe deutlich effizienter gestalten. Hier ist eine Umformulierung, bei der der Zellbereich in ein Array namens „colors“ eingelesen wird, die Farbzuweisung für die Daten im Array erfolgt 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.

Bibliotheken in UI-lastigen Skripts vermeiden

Bibliotheken sind eine praktische Möglichkeit, Code wiederzuverwenden, aber sie verlängern die Zeit, die zum Starten des Skripts benötigt wird, geringfügig. Bei relativ lang laufenden Skripts (z. B. einem Dienstprogramm zum Bereinigen Ihrer Google Drive-Dateien) ist diese Verzögerung nicht spürbar. Bei clientseitigen HTML Service-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 nur sparsam verwendet werden. In Scripts, die nicht zu Add-ons gehören und viele google.script.run-Aufrufe ausführen, sollten Sie sie möglichst vermeiden.

Cache-Dienst verwenden

Mit dem Cache Service können Sie Ressourcen zwischen Skriptausführungen im Cache speichern. Durch das Zwischenspeichern von Daten können Sie die Anzahl der Abrufe oder die Häufigkeit, mit der Sie die Daten abrufen müssen, reduzieren. Stellen Sie sich beispielsweise vor, Sie haben einen RSS-Feed unter example.com, für den 20 Sekunden zum Abrufen benötigt werden, und Sie möchten den Zugriff auf die durchschnittliche Anfrage beschleunigen. Im folgenden Beispiel wird gezeigt, wie Sie den Cache Service 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;
  }

Wenn sich das Element nicht im Cache befindet, müssen Sie weiterhin 20 Sekunden warten. Bei nachfolgenden Zugriffen ist die Wartezeit jedoch sehr kurz, bis das Element nach 25 Minuten aus dem Cache entfernt wird.