Sprawdzone metody

W tym dokumencie znajdziesz sprawdzone metody, które pomogą Ci zwiększyć skuteczność skryptów.

Minimalizowanie wywołań innych usług

Używanie operacji JavaScript w skrypcie jest znacznie szybsze niż wywoływanie innych usług. Wszystko, co możesz zrobić w Google Apps Script, będzie znacznie szybsze niż wywoływanie funkcji, które muszą pobierać dane z serwerów Google lub serwera zewnętrznego, np. żądania do Arkuszy, Dokumentów, Witryn, Tłumacza, UrlFetch itp. Skrypty będą działać szybciej, jeśli zminimalizujesz liczbę wywołań tych usług.

Rozważ współpracę na dyskach współdzielonych

Jeśli pracujesz nad projektem skryptu z innymi programistami, możesz współpracować nad projektami Apps Script na udostępnionych Dyskach. Pliki na dysku współdzielonym należą do grupy, a nie do poszczególnych użytkowników. Ułatwia to tworzenie i utrzymywanie projektu.

Korzystanie z operacji wsadowych

Skrypty często muszą odczytywać dane z arkusza kalkulacyjnego, wykonywać obliczenia, a następnie zapisywać wyniki w arkuszu. Google Apps Script ma już wbudowane pewne optymalizacje, takie jak używanie pamięci podręcznej z wyprzedzeniem do pobierania tego, co skrypt prawdopodobnie uzyska, oraz zapisywanie w pamięci podręcznej tego, co prawdopodobnie zostanie ustawione.

Możesz pisać skrypty, aby w pełni wykorzystać wbudowane buforowanie, minimalizując liczbę odczytów i zapisów. Naprzemienne polecenia odczytu i zapisu działają powoli. Aby przyspieszyć działanie skryptu, odczytaj wszystkie dane do tablicy za pomocą jednego polecenia, wykonaj wszystkie operacje na danych w tablicy i zapisz dane za pomocą jednego polecenia.

Oto przykład, którego nie należy naśladować ani używać. Skrypt używa tego kodu do ustawiania kolorów tła każdej komórki w siatce arkusza kalkulacyjnego o wymiarach 100 x 100. Używa funkcji o nazwie getColorFromCoordinates() (nie jest tu widoczna), aby określić kolor, który ma być używany w poszczególnych komórkach:

  // 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: przechodzi w pętli przez 100 wierszy i 100 kolumn, zapisując kolejno dane w 10 000 komórek. Pomocny jest zapisywany w pamięci podręcznej zapis zwrotny Google Apps Script, ponieważ wymusza on zapis zwrotny za pomocą polecenia flush na końcu każdego wiersza. Ze względu na buforowanie do arkusza kalkulacyjnego jest wykonywanych tylko 100 wywołań.

Można jednak znacznie zwiększyć wydajność kodu, grupując wywołania. Oto zmodyfikowany kod, w którym zakres komórek jest odczytywany do tablicy o nazwie „colors”, operacja przypisywania koloru 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).setBackgrounds(colors); 

Wykonanie nieefektywnego kodu zajmuje około 70 sekund. Wydajny kod działa tylko 1 sekundę!

Unikaj bibliotek w skryptach z dużą liczbą elementów interfejsu

Biblioteki to wygodny sposób na ponowne wykorzystanie kodu, ale nieznacznie wydłużają czas uruchamiania skryptu. To opóźnienie nie jest zauważalne w przypadku stosunkowo długo działających skryptów (np. skryptu narzędziowego do czyszczenia plików na Dysku Google), ale w przypadku interfejsów użytkownika usługi HTML po stronie klienta, które wykonują powtarzające się, krótkotrwałe wywołania google.script.run, opóźnienie będzie miało wpływ na każde wywołanie. Z tego powodu bibliotek należy używać oszczędnie w dodatkach. Warto też unikać ich w skryptach innych niż dodatki, które wykonują wiele wywołań google.script.run.

Korzystanie z usługi pamięci podręcznej

Możesz użyć usługi pamięci podręcznej, aby przechowywać w niej zasoby między wykonaniami skryptu. Dzięki buforowaniu danych możesz zmniejszyć liczbę lub częstotliwość pobierania danych. Rozważmy sytuację, w której masz plik RSS na stronie example.com, którego pobranie zajmuje 20 sekund, a Ty chcesz przyspieszyć dostęp do niego w przypadku przeciętnego żądania. Poniższy przykład pokazuje, jak używać 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 elementu nie ma w pamięci podręcznej, nadal musisz poczekać 20 sekund, ale kolejne dostępy będą bardzo szybkie, dopóki element nie wygaśnie z pamięci podręcznej po 25 minutach.