Ten dokument zawiera listę sprawdzonych metod, które pomogą Ci poprawić wydajność skryptów.
Minimalizuj wywołania innych usług
Operacje JavaScript w skrypcie są znacznie szybsze niż w przypadku połączenia z innymi usługami. Wszystko, co można osiągnąć w Google Apps Script będzie znacznie szybsze niż w przypadku wykonywania połączeń z serwerów Google lub serwera zewnętrznego, na przykład żądań wysyłanych do Arkuszy, Dokumentów Witryny, Tłumacz, UrlFetch. Skrypty będą działać szybciej, jeśli możesz znaleźć sposoby na zminimalizowanie liczby wywołań tych usług przez skrypty.
Rozważ współpracę przy użyciu dysków współdzielonych
Jeśli pracujesz nad projektem scenariusza z innymi programistami, możesz współpracować nad projektami Apps Script przy użyciu dysków współdzielonych. Pliki na dysku współdzielonym są własnością grupy, a nie poszczególnych osób. Ten ułatwia tworzenie i utrzymywanie projektu.
Korzystanie z operacji zbiorczych
Skrypty zwykle muszą odczytywać dane z arkuszy kalkulacyjnych, wykonywać obliczenia a potem zapisać wyniki danych w arkuszu kalkulacyjnym. Aplikacje Google Skrypt ma już wbudowaną optymalizację, np. korzysta z buforowania z wyprzedzeniem pobierania danych, które prawdopodobnie otrzyma skrypt, i zapisywania w pamięci podręcznej prawdopodobnie będzie ustawione.
Możesz pisać skrypty, aby w maksymalny sposób korzystać z wbudowanego buforowania, minimalizując liczbę operacji odczytu i zapisu. Naprzemienne polecenia odczytu i zapisu działa wolno. Aby przyspieszyć skrypt, odczytaj wszystkie dane do tablicy za pomocą jednego polecenia wykonywać dowolne operacje na danych w tablicy i zapisywać dane za pomocą wystarczy jedno polecenie.
Oto przykład, którego nie należy stosować. Skrypt
za pomocą podanego niżej kodu, aby ustawić kolor tła każdej komórki w
Siatka arkusza kalkulacyjnego 100 x 100. Używa funkcji o nazwie getColorFromCoordinates()
(nie pokazanej tutaj), aby określić, jakiego koloru użyć w przypadku 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 niewydajny: przewija 100 wierszy i 100 kolumn, zapisując z rzędu do 10 000 komórek. Pamięć podręczna zapisu tekstowego Google Apps Script pomaga , bo wymusza zapis zwrotny przy użyciu elementu flush na końcu każdego wiersza. Ponieważ buforowania, dostępnych jest tylko 100 wywołań arkusza kalkulacyjnego.
Jednak kod może być znacznie bardziej wydajny, jeśli wywołania zostaną zgrupowane. Oto nowa wersja kodu, w której zakres komórek jest odczytywany do tablicy o nazwie colors, operacja przypisania koloru jest wykonywana na danych w tablicy, a wartości z 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);
Niewydajny kod uruchamia się po około 70 sekundach. Wydajny kod działa tylko sekunda!
Unikaj bibliotek w skryptach, które generują duży nacisk na interfejs użytkownika
Biblioteki to wygodny sposób na ponowne wykorzystanie kodu,
ale nieco wydłużają czas uruchamiania skryptu. To opóźnienie
jest niezauważalne dla stosunkowo długo działających skryptów (np. skrypt narzędziowy
czyścić pliki na Dysku Google), ale po stronie klienta
interfejsów użytkownika HTML Service, które powtarzają się,
krótkoterminowe google.script.run
będzie dotyczyło każdego połączenia. Z tego powodu biblioteki powinny
oszczędnie można używać w dodatkach,
unikaj ich w skryptach niezwiązanych z dodatkami, które generują wiele wywołań funkcji google.script.run
.
Korzystanie z usługi Cache
Możesz użyć usługi pamięci podręcznej do buforowania zasobów między wykonaniami skryptu. Buforowanie danych pozwala zmniejszyć ile razy lub z jaką częstotliwością należy pobierać dane. Rozważmy scenariusz, w którym masz kanał RSS na stronie example.com, który zajmuje 20 razy sekund pobierania i chcesz przyspieszyć dostęp do przeciętnego żądania. przykład poniżej pokazuje, jak wykorzystać usługę pamięci podręcznej, aby przyspieszyć dostęp do tego i skalowalnych 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, musisz odczekać 20 sekund, kolejne dostępy będą bardzo szybkie, dopóki element nie utraci ważności i nie będzie miał dostępu do pamięci podręcznej w ciągu 25 minut.