Questo documento elenca le best practice per migliorare le prestazioni degli script.
Ridurre al minimo le chiamate ad altri servizi
L'utilizzo di operazioni JavaScript all'interno dello script è più veloce della chiamata ad altri servizi. Qualsiasi operazione che esegui all'interno di Google Apps Script è più veloce rispetto al recupero dei dati dai server di Google o da un server esterno, ad esempio le richieste a Fogli, Documenti, Sites, Sites, Translate e UrlFetch. I tuoi script verranno eseguiti più velocemente se riduci al minimo le chiamate di servizio.
Collaborare con i Drive condivisi
Se lavori a un progetto di script con altri sviluppatori, collabora utilizzando i Drive condivisi. I file che si trovano su un Drive condiviso appartengono al gruppo anziché a singoli utenti, il che semplifica lo sviluppo e la manutenzione dei progetti.
Utilizzare le operazioni batch
Gli script in genere leggono i dati da un foglio di lavoro, eseguono calcoli e riscrivono i risultati. Apps Script utilizza l'ottimizzazione integrata, ad esempio la memorizzazione nella cache di scrittura e la previsione.
Massimizza la memorizzazione nella cache integrata riducendo al minimo le letture e le scritture. L'alternanza di comandi di lettura e scrittura è lenta. Per velocizzare uno script, leggi tutti i dati in un array con un comando, esegui operazioni sui dati dell'array e scrivi i dati con un comando.
Evita di alternare letture e scritture come mostrato in questo esempio inefficiente:
// 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();
}
Lo script è inefficiente perché esegue un ciclo di 10.000 celle con scritture consecutive. Sebbene la cache write-back sia utile, il raggruppamento delle chiamate è molto più efficiente:
// 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);
L'esecuzione del codice inefficiente richiede circa 70 secondi, mentre quella del codice efficiente solo 1 secondo.
Evita le librerie negli script con molte UI
Le librerie sono utili per riutilizzare il codice, ma
aumentano il tempo di avvio dello script. Questo ritardo è evidente nelle interfacce utente Servizio HTML lato client che effettuano chiamate google.script.run ripetute e di breve durata. Utilizza le librerie con parsimonia nei componenti aggiuntivi
ed evita di utilizzarle negli script che effettuano molte chiamate google.script.run.
Utilizzare il servizio di cache
Utilizza il servizio di cache per memorizzare nella cache le risorse tra le esecuzioni degli script. La memorizzazione nella cache riduce la frequenza di recupero dei dati. L'esempio seguente mostra come utilizzare il servizio di cache per velocizzare l'accesso a un 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;
}
Anche se devi comunque attendere 20 secondi se l'elemento non è nella cache, gli accessi successivi sono rapidi fino alla scadenza dell'elemento.