Práticas recomendadas

Este documento lista as práticas recomendadas para melhorar a performance do script.

Minimizar chamadas para outros serviços

Usar operações JavaScript no script é mais rápido do que chamar outros serviços. Tudo o que você faz no Google Apps Script é mais rápido do que buscar dados dos servidores do Google ou de um servidor externo, como solicitações para Planilhas, Documentos, Sites, Tradutor e UrlFetch. Seus scripts serão executados mais rapidamente se você minimizar as chamadas de serviço.

Colaborar com drives compartilhados

Se você trabalha em um projeto de script com outros desenvolvedores, colabore usando drives compartilhados. Os arquivos em um drive compartilhado pertencem ao grupo, e não a pessoas específicas, o que facilita o desenvolvimento e a manutenção de projetos.

Usar operações em lote

Os scripts geralmente leem dados de uma planilha, fazem cálculos e gravam os resultados. O Apps Script usa otimizações integradas, como cache de gravação e antecipação.

Maximize o armazenamento em cache integrado minimizando leituras e gravações. Alternar comandos de leitura e gravação é lento. Para acelerar um script, leia todos os dados em uma matriz com um comando, execute operações nos dados da matriz e grave os dados com um comando.

Evite alternar leituras e gravações, como mostrado neste exemplo ineficiente:

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

O script é ineficiente porque faz um loop por 10.000 células com gravações consecutivas. Embora o cache de gravação ajude, o agrupamento de chamadas é muito mais eficiente:

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

O código ineficiente leva cerca de 70 segundos para ser executado, enquanto o eficiente leva apenas 1 segundo.

Evite bibliotecas em scripts com muitas interfaces

Bibliotecas são convenientes para reutilizar código, mas aumentam o tempo de inicialização do script. Esse atraso é perceptível em interfaces do usuário do serviço HTML do lado do cliente que fazem chamadas de google.script.run repetidas e de curta duração. Use bibliotecas com moderação em complementos e evite usá-las em scripts que fazem muitas chamadas google.script.run.

Usar o serviço de cache

Use o serviço de cache para armazenar em cache recursos entre execuções de script. O armazenamento em cache reduz a frequência de busca de dados. O exemplo a seguir mostra como usar o serviço de cache para acelerar o acesso a um feed RSS lento.

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

Enquanto você ainda espera 20 segundos se o item não estiver no cache, os acessos subsequentes são rápidos até que o item expire.