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 a chiamata ad altri servizi. Tutto ciò che puoi fare con Google Apps Script sarà molto più veloce rispetto alle chiamate che richiedono il recupero dei dati I server di Google o un server esterno, ad esempio le richieste a Fogli, Documenti Sites, Traduttore, UrlFetch e così via. Se puoi, i tuoi script verranno eseguiti più velocemente trovare modi per ridurre al minimo le chiamate che gli script effettuano a quei servizi.

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

Gli script di solito hanno bisogno di leggere i dati di un foglio di lavoro, eseguire calcoli, e poi trascrivere i risultati dei dati in un foglio di lavoro. App Google Lo script ha già una certa ottimizzazione integrata, ad esempio l'uso della memorizzazione nella cache look-ahead recuperare ciò che uno script ha maggiori probabilità di ottenere e scrivere nella cache per salvare che viene probabilmente impostato.

Puoi scrivere script per sfruttare al meglio la memorizzazione nella cache integrata, riducendo al minimo il numero di letture e scritture. Alternanza dei comandi di lettura e scrittura è lento. Per velocizzare uno script, leggi tutti i dati in un array con un solo comando, eseguire operazioni sui dati nell'array e scriverli un solo comando.

Ecco un esempio che non dovresti seguire o utilizzare. Uno script utilizza il seguente codice per impostare i colori di sfondo di ogni cella in un Griglia del foglio di lavoro 100 x 100. Utilizza la funzione denominata getColorFromCoordinates() (non mostrato 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 a 10.000 celle consecutivamente. La cache di write-back di Google Apps Script aiuta, perché forza un write-back utilizzando il flush alla fine di ogni riga. Poiché della memorizzazione nella cache, ci sono solo 100 chiamate al foglio di lavoro.

Ma il codice può essere reso molto più efficiente raggruppando le chiamate in batch. Ecco un riscrivere in cui l'intervallo di celle viene letto in un array chiamato colori, il colore viene eseguita sui dati nell'array e i valori in vengono scritte 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 solo 1 secondo.

Evita le librerie negli script che usano molta interfaccia utente

Le librerie sono un modo pratico per riutilizzare 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 il lato client Le interfacce utente di HTML Service che eseguono il deployment a breve google.script.run chiamate, il ritardo influirà su ogni chiamata. A causa di questo problema, le biblioteche devono essere utilizzato con parsimonia nei componenti aggiuntivi e potrebbe essere utile evitali in script non aggiuntivi che effettuano molte chiamate google.script.run.

Utilizzare il servizio Cache

Puoi utilizzare il servizio di cache per memorizzare le risorse nella cache tra un'esecuzione dello script e l'altra. Memorizzando i dati nella cache, puoi ridurre il numero di volte o la frequenza con cui devi recuperare i dati. Considera lo scenario in cui hai un feed RSS su example.com che richiede 20 secondi da recuperare e vuoi velocizzare l'accesso alla richiesta media. La l'esempio riportato di seguito mostra come utilizzare il servizio di cache per velocizzare l'accesso e i dati di Google Cloud.

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

Dovrai aspettare 20 secondi se l'elemento non si trova nella cache, gli accessi successivi saranno molto rapidi fino alla scadenza dell'elemento dalla cache in 25 minuti.