El rendimiento de GAS es más lento que el de otros servidores JavaScript

Trabajando en unGoogle Sites El sitio, que toma datos de una hoja de cálculo y crea varios gráficos de forma dinámica, mencioné que Google Apps Script funciona bastante lento. Perfilé el código y lo optimicé, usando elCache Servicio, donde sea posible. Después de la optimización, el código de trazado toma aprox. 3 segundos (2759 ms es uno de los tiempos más rápidos, que he visto) para dibujar 11 gráficos con 127 filas. Y esta vez es para el caso cuando todos los datos se colocan en el caché. El primer tiempo de ejecución, que obtiene datos de la hoja de cálculo y los coloca en el caché, es de alrededor de 10 segundos. El código perfilado requería tiempo suficiente (decenas de milisegundos) en lugares simples. Para medir el rendimiento de GAS, escribí un procedimiento muy simple y lo ejecuté en el entorno GAS, como aplicación web implementada, y en elCaja de juegos. También he enviado unproblema al rastreador de problemas de GAS.

Eric Koleda razonablementemencionado, que no es correcto comparar un código de servidor con un código que se ejecuta en un cliente. Reescribí el código de referencia y aquí están los resultados. Los detalles y explicaciones son los siguientes.

Engine          |List To Map|Adjust|Quick Sort|Sort|Complete|
GAS             |        138|   196|       155|  38|     570|
rhino-1.6.5     |         67|    44|        31|   9|     346|
spidermonkey-1.7|         40|    36|        11|   5|     104|
GAS - una fila que contiene los tiempos de ejecución de diferentes funciones ejecutadas en el motor GAS. Todos los tiempos están en milisegundos. El tiempo de ejecución del GAS se desplaza en límites bastante amplios. En la tabla están los tiempos más rápidos que tuve entre 5 y 10 ejecuciones. Lo peorComplete El tiempo, que he visto, fue de 1194 ms. El código fuente esaquí. Los resultados sonaquí.rhino-1.6.5 yspidermonkey-1.7 - Las filas contienen los tiempos de ejecución de las mismas funciones queGAS pero ejecutado en los correspondientes motores de Javascript utilizandoideone.com. El código y tiempos de estos motores sonaquí yaquí.

El código de referencia contiene algunas funciones.

List To Map [listToMap] - una función que convierte una lista de objetos en un mapa que tiene una clave compuesta. Se toma de la secuencia de comandos del sitio y toma aprox. 9.2% (256 de 2759 ms) del código de graficación.Adjust [adjustData_] - una función que convierte todas las columnas de fecha de una matriz en un texto en un formato predefinido, las transpone y convierte las filas de[[[a], [1]], [[b], [2]]] forma a la[[a, 1], [b, 2]] uno. También se toma del guión y consume aprox. 30.7% (857 de 2759 ms).Sort - un estandarArray.sort función, se incluye en la prueba para ver qué tan rápido funcionan las funciones estándar.Quick Sort [quick_sort] - una función de clasificación rápida tomadaaquí. Se añade al índice de referencia para comparar con elArray.sort función de ejecución de tiempo.Complete [test] - una función que incluye llamadas de funciones, preparación de datos de prueba y las funciones mencionadas anteriormente. Este tiempo no es resumen de tiempos en bruto.

Conclusión: El tiempo de ejecución de las funciones de GAS se desplaza. El gasComplete funciona la función1.6 veces más lento que el competidor más lento. El estándar GASArray.sort la función es4 veces más lento que el más lento de los otros dos motores. El servicioList To Map yAdjust en resumen son3 veces más lento (334 ms frente a 111 ms) que el competidor más lento. Las funciones toman el 39,2% (1113 de 2759 ms) de la función de creación de gráficos. No esperaba que estas funciones funcionaran tan lentamente. Es posible optimizarlos, por ejemplo, utilizando el caché. Supongamos que después de la optimización, el tiempo de ejecución de estas funciones será de 0 ms. En este caso la ejecución de la función de cartografía es de 1646 ms.

Deseos: Si el Equipo GAS pudiera optimizar su motor a la velocidad del competidor más lento, es posible esperar que el tiempo de ejecución se reduzca hasta 1 segundo o menos. También sería bueno optimizar el tiempo para recuperar datos de una hoja de cálculo. Entiendo que las hojas de cálculo no están diseñadas para manejar una gran cantidad de datos, pero en cualquier caso, aumentará el rendimiento general.

Respuestas a la pregunta(1)

Su respuesta a la pregunta