Best practice

Questo documento elenca le best practice che ti aiuteranno a migliorare le prestazioni dei tuoi script.

Riduci al minimo le chiamate ad altri servizi

L'utilizzo delle operazioni JavaScript all'interno dello script è molto più veloce rispetto alla chiamata di altri servizi. Tutto ciò che puoi fare all'interno di Google Apps Script stesso sarà molto più veloce delle chiamate che devono recuperare i dati dai server di Google o da un server esterno, come richieste a Fogli, Documenti, Sites, Traduttore, UrlFetch e così via. Se riesci a trovare dei modi per ridurre al minimo le chiamate a questi servizi, i tuoi script verranno eseguiti più velocemente.

Valuta la possibilità di collaborare con i Drive condivisi

Se stai lavorando a un progetto di script con altri sviluppatori, puoi collaborare a progetti Apps Script con Drive condivisi. I file che si trovano in un Drive condiviso sono di proprietà del gruppo e non di singoli utenti. Questo semplifica lo sviluppo e la manutenzione del progetto.

Utilizzare le operazioni batch

Di solito, gli script devono leggere i dati di un foglio di lavoro, eseguire calcoli e quindi trascrivere i risultati dei dati in un foglio di lavoro. Google Apps Script dispone già di alcune ottimizzazioni integrate, come l'uso della memorizzazione nella cache look-ahead per recuperare ciò che uno script può ottenere e la scrittura nella cache per salvare ciò che probabilmente verrà impostato.

Puoi scrivere script per sfruttare al meglio la memorizzazione nella cache integrata, riducendo al minimo il numero di letture e scritture. L'alternanza dei comandi di lettura e scrittura è lenta. Per velocizzare uno script, leggi tutti i dati in un array con un solo comando, esegui qualsiasi operazione sui dati nell'array e scrivi i dati con un unico comando.

Ecco un esempio che non dovresti seguire o utilizzare. Uno script utilizza il codice riportato di seguito per impostare i colori di sfondo di ogni cella in una griglia del foglio di lavoro 100 x 100. Utilizza la funzione denominata getColorFromCoordinates() (non mostrata qui) per determinare quale colore utilizzare per ogni cella:

  // 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: esegue il loop su 100 righe e 100 colonne, scrivendo consecutivamente su 10.000 celle. La cache write-back di Google Apps Script è utile perché forza il write-back alla fine di ogni riga. A causa della memorizzazione nella cache, sono disponibili solo 100 chiamate al foglio di lavoro.

Ma il codice può essere reso molto più efficiente raggruppando le chiamate in batch. Ecco una riscrittura in cui l'intervallo di celle viene letto in un array chiamato colori, l'operazione di assegnazione del colore viene eseguita sui dati nell'array e i valori nell'array vengono scritti nel foglio di lavoro:

  // 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).setBackgroundColors(colors);

L'esecuzione del codice inefficiente richiede circa 70 secondi. Il codice, efficiente, viene eseguito in un solo secondo.

Evita le librerie negli script che usano molta interfaccia utente

Le librerie sono un modo pratico per riutilizzare il codice, ma aumentano leggermente il tempo necessario per avviare lo script. Questo ritardo non è evidente per gli script a lunga esecuzione (come uno script di utilità per ripulire i file di Google Drive), ma per le interfacce utente HTML Service lato client che effettuano chiamate google.script.run ripetute e a breve esecuzione, il ritardo influirà su ogni chiamata. A causa di questo problema, le librerie devono essere utilizzate con parsimonia nei componenti aggiuntivi e ti consigliamo di evitarli in script non aggiuntivi che effettuano molte chiamate google.script.run.

Utilizzare il servizio Cache

Puoi utilizzare il servizio cache per memorizzare le risorse tra le esecuzioni dello script. Memorizzando i dati nella cache, puoi ridurre il numero di volte o la frequenza con cui recuperare i dati. Considera lo scenario in cui hai un feed RSS su example.com che impiega 20 secondi per essere recuperato e vuoi velocizzare l'accesso alla richiesta media. L'esempio seguente mostra come utilizzare il servizio cache per velocizzare l'accesso a questi dati.

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

Ora, anche se dovrai attendere 20 secondi se l'elemento non si trova nella cache, gli accessi successivi saranno molto veloci fino a quando l'elemento scadrà dopo 25 minuti.