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.
Grandes conjuntos de dados e cálculos complexos
As Planilhas Google são uma ferramenta poderosa, mas, à medida que os conjuntos de dados crescem e os cálculos se tornam mais complexos, você pode encontrar problemas de desempenho, como lentidão da planilha, erros IMPORTRANGE e tempo limite de script.
Quando usar um banco de dados
Se a planilha estiver se aproximando do limite de 10 milhões de células ou se você tiver muitos formulários conectados (por exemplo, 10 ou mais) e fórmulas complexas entre planilhas, use uma solução de banco de dados dedicada.
- Google Cloud SQL: um serviço de banco de dados relacional totalmente gerenciado para MySQL, PostgreSQL e SQL Server. Use o serviço JDBC para se conectar ao Cloud SQL ou a outros bancos de dados externos, como Oracle ou MongoDB (usando as pontes adequadas).
- BigQuery: um data warehouse sem servidor e altamente escalonável. Você pode usar as Páginas conectadas para analisar grandes conjuntos de dados do BigQuery diretamente nas Planilhas ou usar o serviço do BigQuery para interagir com dados do Apps Script.
Otimização da performance de fórmulas
O uso excessivo de determinadas fórmulas pode deixar sua planilha mais lenta:
- ARRAYFORMULA: embora seja útil, cálculos
ARRAYFORMULAem grande escala podem ser caros. - VLOOKUP e OFFSET: essas funções podem ser lentas em grandes conjuntos de dados. Considere usar
INDEXeMATCHou o Apps Script para fazer pesquisas de forma mais eficiente na memória. - IMPORTRANGE: o uso frequente de
IMPORTRANGEem muitas planilhas pode causar "Erros internos" se as planilhas de origem forem grandes ou estiverem sob carga pesada. Consolidar os dados em uma fonte centralizada pode ajudar.
Processamento de tempo limite de script
O Apps Script tem limites de tempo de execução (normalmente 6 minutos por execução ou 30 minutos para algumas contas do Google Workspace). Se o script falhar com frequência porque está excedendo o limite de execução:
- Use operações em lote: conforme mencionado na seção Usar operações em lote, minimize as chamadas para planilhas e outros serviços.
- Divida as tarefas: divida tarefas grandes em partes menores que podem ser concluídas dentro do limite de tempo.
- Usar acionadores para continuações: configure um acionador instalável com base em tempo para retomar um processo de longa duração. O script pode armazenar o estado atual (por exemplo, o último índice de linha processado) usando o serviço de propriedades e continuar desse ponto na próxima execução.