¿Es setValues ​​más lento que setValue?

Aug 26 2020

Tengo un documento de Google Doc con el script de Google Apps Script en ejecución al que contribuyen varias personas. Hay un onEditdisparador que se activa cuando las personas editan la hoja. Según tengo entendido, si una persona edita la hoja, esto activa mi onEditfunción de activación.

Si una segunda persona edita la hoja antes de que el primer onEditprocesamiento termine, detiene la primera instancia y la segunda onEditcomienza sin terminar la primera.

Para evitar esto, estoy tratando de hacer que mi código sea lo más eficiente posible con la teoría de que si el onEditproceso lleva menos tiempo es menos probable que se superponga. Para lograr esto, he intentado minimizar mis lecturas / escrituras. Usando una serie de declaraciones de registrador, he rastreado líneas de código que consumen mucho tiempo. He notado que una de mis setValues()líneas tarda casi 6 segundos en ejecutarse. Es una gran matriz que se vuelve a publicar en la hoja después de que le hice ajustes.

Mis preguntas:

  1. ¿Una setValues()llamada tarda más que una setValue()?
  2. ¿Una setValues()llamada de una matriz pequeña lleva menos tiempo que una setValues()de una matriz grande?

Sé que uno setValues()será mucho más rápido que 1000 setValue()comandos.

Supuse que una escritura en la hoja debería llevar aproximadamente la misma cantidad de tiempo, independientemente del tamaño. ¿Hay alguna forma de minimizar este tiempo?

Respuestas

3 Tanaike Aug 27 2020 at 04:33

P1: ¿ setValues()Toma más tiempo que a setValue()?

A1: No es. Acerca de esto, puede ver en el siguiente resultado experimental.

P2: ¿La setValues()llamada de una matriz pequeña lleva menos tiempo que la setValues()de una matriz grande?

A2: Sí. Acerca de esto, puede ver en el siguiente resultado experimental.

P3: Supuse que una escritura en la hoja debería llevar aproximadamente la misma cantidad de tiempo, independientemente del tamaño. ¿Hay alguna forma de minimizar este tiempo?

A3: Cuando desea reducir el costo del proceso para poner más los valores, ¿qué tal si usa Sheets API? Sobre esto, puedes verlo en la figura de "A2".

Nota:

  • El fundamento de las respuestas anteriores es el punto de referencia: leer y escribir hojas de cálculo con Google Apps Script .

  • Como comentario de @ TheMaster , también creo que LockService podría resolver su problema .

    • Creo que el script de muestra de LockService se puede ver en stackoverflow. Árbitro