Czy setValues jest wolniejsze niż setValue?
Mam dokument Google z uruchomionym skryptem Google Apps Script, nad którym pracuje wiele osób. Istnieje onEditwyzwalacz, który jest uruchamiany, gdy ludzie edytują arkusz. Jak rozumiem, jeśli jedna osoba edytuje arkusz, uruchamia to moją onEditfunkcję wyzwalacza.
Jeśli druga osoba edytuje arkusz przed pierwszym onEditzakończonym przetwarzaniem, zatrzymuje pierwszą instancję, a druga onEditrozpoczyna się bez ukończenia pierwszej.
Aby tego uniknąć, staram się uczynić mój kod tak wydajnym, jak to tylko możliwe, stosując teorię, że jeśli onEditproces zajmuje mniej czasu, prawdopodobieństwo nakładania się jest mniejsze. Aby to osiągnąć, próbowałem zminimalizować mój odczyt / zapis. Używając serii instrukcji rejestrujących, wyśledziłem wiersze kodu, które są czasochłonne. Zauważyłem, że jedna z moich setValues()linii działa prawie 6 sekund. Jest to duża tablica, która jest umieszczana z powrotem w arkuszu po wprowadzeniu poprawek.
Moje pytania:
- Czy
setValues()rozmowa trwa dłużej niżsetValue()? - Czy
setValues()wywołanie małej tablicy zajmuje mniej czasu niż wywołaniesetValues()dużej tablicy?
Wiem, że setValues()będzie znacznie szybszy niż 1000 setValue()poleceń.
Założyłem, że jeden zapis na arkuszu zajmie mniej więcej tyle samo czasu, niezależnie od rozmiaru. Czy jest jakiś sposób, żebym mógł zminimalizować ten czas?
Odpowiedzi
P1: Czy
setValues()trwa to dłużej niżsetValue()?
A1: Nie. O tym można zobaczyć na podstawie następującego wyniku eksperymentu.
P2: Czy
setValues()wywołanie małej macierzy zajmuje mniej czasu niż wywołaniesetValues()dużej tablicy?
A2: Tak. O tym można zobaczyć na podstawie następującego wyniku eksperymentu.
P3: Przypuszczałem, że jeden zapis na arkuszu powinien zająć mniej więcej tyle samo czasu, niezależnie od rozmiaru. Czy jest jakiś sposób, żebym mógł zminimalizować ten czas?
A3: Jeśli chcesz zmniejszyć koszt procesu wprowadzania wartości, co powiesz na użycie interfejsu API Arkuszy? O tym możesz zobaczyć na rysunku „A2”.
Uwaga:
Uzasadnieniem dla powyższych odpowiedzi jest Benchmark: Reading and Writing Spreadsheet using Google Apps Script .
Jako komentarz @ TheMaster myślę również, że Twój problem może zostać rozwiązany przez LockService .
- Myślę, że przykładowy skrypt LockService można zobaczyć na stackoverflow. Nr ref