Sprawdzone metody

Ten dokument zawiera sprawdzone metody, które pomogą Ci poprawić wydajność skryptów.

Minimalizuj liczbę połączeń z innymi usługami

Operacje JavaScriptu w skrypcie są znacznie szybsze niż wywoływanie innych usług. Czynności, które można wykonać bezpośrednio w Google Apps Script, są znacznie szybsze niż wykonywanie żądań pobierających dane z serwerów Google lub z serwera zewnętrznego – na przykład żądania wysyłane do Arkuszy, Dokumentów, Witryn, Tłumacza czy UrlFetch. Jeśli znajdziesz sposoby na zminimalizowanie liczby wywołań tych usług przez skrypty, będą one działać szybciej.

Rozważ współpracę za pomocą dysków współdzielonych

Jeśli pracujesz nad projektem skryptu z innymi programistami, możesz współpracować nad projektami Apps Script na dyskach współdzielonych. Pliki na dysku współdzielonym są własnością grupy, a nie poszczególnych osób. Ułatwia to tworzenie i obsługę projektu.

Używanie operacji wsadowych

Skrypty zwykle muszą odczytywać dane z arkusza kalkulacyjnego, wykonywać obliczenia, a następnie zapisywać wyniki danych w arkuszu kalkulacyjnym. Skrypt Google Apps ma już wbudowaną optymalizację, np. buforuje wyświetlanie z wyprzedzeniem, aby pobierać informacje, które prawdopodobnie otrzyma skrypt, oraz zapisywać dane w pamięci podręcznej, aby zapisać to, co prawdopodobnie zostanie ustawione.

Możesz pisać skrypty, aby w pełni wykorzystać wbudowaną pamięć podręczną i zminimalizować liczbę odczytów i zapisów. Naprzemienne polecenia odczytu i zapisu działają wolno. Aby przyspieszyć działanie skryptu, odczytaj wszystkie dane do tablicy za pomocą jednego polecenia, wykonaj dowolne operacje na danych w tablicy i zapisz dane za pomocą jednego polecenia.

Oto przykład, z którego nie należy korzystać. Skrypt używa podanego niżej kodu do ustawienia kolorów tła każdej komórki w siatce arkusza kalkulacyjnego o wymiarach 100 x 100. Wykorzystuje on funkcję o nazwie getColorFromCoordinates() (nie pokazano tutaj), aby określić kolor każdej komórki:

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

Skrypt jest nieefektywny: przegląda 100 wierszy i 100 kolumn, zapisując kolejno do 10 000 komórek. Pamięć podręczna zapisu zwrotnego Google Apps Script jest przydatna, ponieważ wymusza odbiór zwrotny za pomocą parametru „flush” na końcu każdego wiersza. Arkusz kalkulacyjny może mieć tylko 100 wywołań ze względu na buforowanie.

Kod można jednak znacznie poprawić, grupując wywołania. W tym przykładzie zakres komórek jest odczytywany do tablicy o nazwie kolory, operacja przypisywania kolorów jest wykonywana na danych w tablicy, a wartości w tablicy są zapisywane w arkuszu kalkulacyjnym:

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

Wygenerowanie nieefektywnego kodu zajmuje około 70 sekund. Wydajny kod uruchamia się w zaledwie sekundę.

Unikaj bibliotek w skryptach z dużą ilością zasobów interfejsu

Biblioteki to wygodny sposób na ponowne wykorzystanie kodu, ale nieznacznie wydłużają czas uruchamiania skryptu. To opóźnienie jest niezauważalne w przypadku stosunkowo długo działających skryptów (np. skryptów narzędziowych czyszczących pliki na Dysku Google), ale w przypadku interfejsów usługi HTML po stronie klienta, które wykonują powtarzane, krótkotrwałe wywołania google.script.run, opóźnienie będzie miało wpływ na każde wywołanie. Z tego powodu należy oszczędnie korzystać z bibliotek w dodatkach i unikać ich w skryptach, które nie są dodatkami, które wykonują dużo wywołań google.script.run.

Korzystanie z usługi pamięci podręcznej

Możesz użyć usługi pamięci podręcznej, aby buforować zasoby między wykonaniami skryptów. Zapisując dane w pamięci podręcznej, możesz zmniejszyć liczbę ich pobierania lub częstotliwość ich pobierania. Przeanalizujmy scenariusz, w którym masz kanał RSS w witrynie example.com, którego pobieranie zajmuje 20 sekund i chcesz przyspieszyć dostęp w przypadku przeciętnego żądania. Poniższy przykład pokazuje, jak użyć usługi pamięci podręcznej, aby przyspieszyć dostęp do tych danych.

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

Jeśli element nie znajduje się w pamięci podręcznej, trzeba czekać jeszcze 20 sekund, ale kolejne próby użycia będą bardzo szybkie, aż element zniknie z pamięci podręcznej w ciągu 25 minut.