Рекомендации

В этом документе перечислены лучшие практики для повышения производительности скриптов.

Сведите к минимуму обращения к другим службам.

Использование операций JavaScript внутри вашего скрипта быстрее, чем вызов других сервисов. Все, что вы делаете непосредственно в Google Apps Script, выполняется быстрее, чем получение данных с серверов Google или внешних серверов, например, запросы к Sheets, Docs, Sites, Translate и UrlFetch. Ваши скрипты будут работать быстрее, если вы минимизируете вызовы сервисов.

Совместная работа с использованием общих дисков.

Если вы работаете над скриптовым проектом с другими разработчиками, используйте для совместной работы общие диски . Файлы на общем диске принадлежат группе, а не отдельным лицам, что упрощает разработку и сопровождение проекта.

Используйте пакетные операции

Скрипты обычно считывают данные из электронных таблиц, выполняют вычисления и записывают результаты обратно. Apps Script использует встроенные механизмы оптимизации, такие как предварительный просмотр и кэширование записи.

Максимально используйте встроенное кэширование, минимизируя операции чтения и записи. Чередование команд чтения и записи замедляет работу. Чтобы ускорить выполнение скрипта, считайте все данные в массив одной командой, выполните операции над данными массива и запишите данные одной командой.

Избегайте чередования операций чтения и записи, как показано в этом неэффективном примере:

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

Этот скрипт неэффективен, потому что он перебирает 10 000 ячеек с последовательными операциями записи. Хотя кэширование с отложенной записью помогает, пакетная обработка вызовов гораздо эффективнее:

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

Неэффективный код выполняется примерно за 70 секунд, в то время как эффективный код выполняется всего за 1 секунду.

Избегайте использования библиотек в скриптах, интенсивно использующих пользовательский интерфейс.

Библиотеки удобны для повторного использования кода, но увеличивают время запуска скрипта. Эта задержка заметна в клиентских HTML-интерфейсах, использующих сервисы , которые выполняют повторяющиеся, короткие вызовы google.script.run . Используйте библиотеки экономно в дополнениях и избегайте их в скриптах, которые часто вызывают google.script.run .

Воспользуйтесь службой кэширования.

Используйте службу кэширования для кэширования ресурсов между выполнениями скриптов. Кэширование снижает частоту получения данных. В следующем примере показано, как использовать службу кэширования для ускорения доступа к медленному RSS-каналу.

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

Хотя вам по-прежнему придется ждать 20 секунд, если элемент не находится в кэше, последующие обращения будут быстрыми до тех пор, пока срок действия элемента не истечет.