SetValues ​​è più lento di setValue?

Aug 26 2020

Ho un documento Google con lo script di Google Apps Script in esecuzione a cui più persone contribuiscono. C'è un onEdittrigger che viene attivato quando le persone modificano il foglio. A quanto ho capito, se una persona modifica il foglio, questo attiva la mia onEditfunzione di attivazione.

Se una seconda persona modifica il foglio prima che la prima onEditelaborazione sia terminata, interrompe la prima istanza e la seconda onEditinizia senza terminare la prima.

Per evitare ciò, sto cercando di rendere il mio codice il più efficiente possibile con la teoria che se il onEditprocesso richiede meno tempo è meno probabile che si sovrapponga. Per ottenere ciò ho cercato di ridurre al minimo le mie letture / scritture. Utilizzando una serie di istruzioni logger, ho rintracciato righe di codice che richiedono molto tempo. Ho notato che una delle mie setValues()linee impiega quasi 6 secondi per essere eseguita. È un ampio array che viene postato di nuovo sul foglio dopo che ho apportato modifiche.

Le mie domande:

  1. Una setValues()chiamata richiede più tempo di una setValue()?
  2. Una setValues()chiamata di un array piccolo richiede meno tempo di una chiamata di un array setValues()grande?

So che uno setValues()sarà molto più veloce di 1000 setValue()comandi.

Avevo presunto che una scrittura sul foglio richiedesse circa la stessa quantità di tempo indipendentemente dalle dimensioni. C'è un modo per ridurre al minimo questo tempo?

Risposte

3 Tanaike Aug 27 2020 at 04:33

Q1: un setValues()richiede più tempo di un setValue()?

A1: Non è. A proposito di questo, puoi vedere dal seguente risultato sperimentale.

D2: Una setValues()chiamata di un piccolo array richiede meno tempo rispetto a una setValues()di una grande matrice?

A2: È sì. A proposito di questo, puoi vedere dal seguente risultato sperimentale.

D3: Avevo presunto che una scrittura sul foglio avrebbe richiesto circa la stessa quantità di tempo indipendentemente dalle dimensioni. C'è un modo per ridurre al minimo questo tempo?

A3: Quando vuoi ridurre il costo del processo per inserire di più i valori, che ne dici di utilizzare l'API di Fogli? A proposito di questo, puoi vederlo nella figura di "A2".

Nota:

  • La logica delle risposte di cui sopra è Benchmark: Reading and Writing Spreadsheet using Google Apps Script .

  • Come commento di @ TheMaster , penso anche che il tuo problema potrebbe essere risolto da LockService .

    • Penso che lo script di esempio di LockService possa essere visto nello stackoverflow. Rif