SetValues è più lento di setValue?
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:
- Una
setValues()chiamata richiede più tempo di unasetValue()? - Una
setValues()chiamata di un array piccolo richiede meno tempo di una chiamata di un arraysetValues()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
Q1: un
setValues()richiede più tempo di unsetValue()?
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 unasetValues()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