Ist setValues langsamer als setValue?
Ich habe ein Google Doc mit Google Apps Script-Skript, zu dem mehrere Personen beitragen. Es gibt einen onEditAuslöser, der ausgelöst wird, wenn Personen das Blatt bearbeiten. Wenn eine Person das Blatt bearbeitet, löst dies nach meinem Verständnis meine onEditTriggerfunktion aus.
Wenn eine zweite Person das Blatt vor der ersten onEditabgeschlossenen Verarbeitung bearbeitet, stoppt sie die erste Instanz und die zweite onEditbeginnt, ohne die erste zu beenden.
Um dies zu vermeiden, versuche ich, meinen Code so effizient wie möglich zu gestalten, mit der Theorie, dass onEdites weniger wahrscheinlich ist, dass sich der Prozess überschneidet , wenn er weniger Zeit in Anspruch nimmt. Um dies zu erreichen, habe ich versucht, meine Lese- / Schreibvorgänge zu minimieren. Mit einer Reihe von Logger-Anweisungen habe ich zeitaufwändige Codezeilen aufgespürt. Ich habe festgestellt, dass eine meiner setValues()Zeilen fast 6 Sekunden dauert. Es ist ein großes Array, das wieder auf dem Blatt angezeigt wird, nachdem ich Anpassungen daran vorgenommen habe.
Meine Fragen:
- Dauert ein
setValues()Anruf länger als einsetValue()? - Dauert ein
setValues()Aufruf eines kleinen Arrays weniger Zeit als ein AufrufsetValues()eines großen Arrays?
Ich weiß, dass man setValues()viel schneller als 1000 setValue()Befehle sein wird.
Ich hatte angenommen, dass ein Schreiben auf das Blatt unabhängig von der Größe ungefähr die gleiche Zeit in Anspruch nehmen sollte. Kann ich diese Zeit auf irgendeine Weise minimieren?
Antworten
Q1: Dauert a
setValues()länger als asetValue()?
A1: Nein. Dies können Sie dem folgenden experimentellen Ergebnis entnehmen.
F2: Dauert ein
setValues()Aufruf eines kleinen Arrays weniger Zeit als ein AufrufsetValues()eines großen Arrays?
A2: Ja. Dies können Sie dem folgenden experimentellen Ergebnis entnehmen.
F3: Ich hatte angenommen, dass ein Schreibvorgang auf das Blatt unabhängig von der Größe ungefähr genauso lange dauern sollte. Kann ich diese Zeit auf irgendeine Weise minimieren?
A3: Wenn Sie die Prozesskosten für das Setzen der Werte reduzieren möchten, wie wäre es dann mit der Verwendung der Sheets API? Darüber können Sie es an der Abbildung "A2" sehen.
Hinweis:
Das Grundprinzip der obigen Antworten lautet Benchmark: Lesen und Schreiben einer Tabelle mit Google Apps Script .
Als Kommentar von @ TheMaster denke ich auch, dass Ihr Problem möglicherweise von LockService behoben wird .
- Ich denke, dass das Beispielskript von LockService im Stackoverflow zu sehen ist. Ref