Производительность ГАЗа ниже, чем у другого серверного JavaScript

Работая наGoogle Sites На сайте, который берет данные из электронной таблицы и динамически создает несколько диаграмм, я упоминал, что Google Apps Script работает довольно медленно. Я профилировал код и оптимизировал его, используякэш Сервис там, где это возможно. После оптимизации код графика занимает ок. 3 секунды (2759 мс - одно из самых быстрых времен, которое я когда-либо видел), чтобы нарисовать 11 диаграмм, имеющих 127 строк. И это время для случая, когда все данные помещаются в кеш. Первое время выполнения, при котором данные извлекаются из электронной таблицы и помещаются в кэш, составляет около 10 секунд. Профилированный код требует достаточно времени (десятки миллисекунд) в простых местах. Чтобы измерить производительность GAS, я написал очень простую процедуру и выполнил ее в среде GAS, в качестве развернутого веб-приложения и вДетская площадка Каха, Также я представилвопрос на трекер проблемы ГАЗ.

Эрик Коледа разумноупомянутыйто, что некорректно сравнивать код сервера с кодом, выполняющимся на клиенте. Я переписал тестовый код и вот результаты. Подробности и объяснения следующие.

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 - a row containing the execution times of different functions ran on the GAS engine. All the times are in milliseconds. The GAS execution time drifts in quite wide limits. In the table are the most fast times which I had across 5-10 executions. The worst Complete time, which I have seen, was 1194 ms. The source code is here. The results are here. rhino-1.6.5 and spidermonkey-1.7 - rows contain the execution times of the same functions as GAS but executed on correspondent Javascript engines using ideone.com. The code and times for these engines are here and here.

Код теста содержит несколько функций.

List To Map [listToMap] - a function which converts a list of objects to a map having a compound key. It is taken from the site script and takes approx. 9.2% (256 of 2759 ms) of the charting code. Adjust [adjustData_] - a function which converts all date columns in a matrix to a text in a predefined format, transposes it and converts rows from the [[[a], [1]], [[b], [2]]] form to the [[a, 1], [b, 2]] one. It is also taken from the script and consumes approx. 30.7% (857 of 2759 ms). Sort - a standard Array.sort function, it is included to the test to see how fast work standard functions. Quick Sort [quick_sort] - a quick sort function taken here. It is added to the benchmark to compare with the Array.sort function execution time. Complete [test] - a function which includes calls of functions, preparing test data, and the functions mentioned above. This time is not summary of times in a raw.

Conclusion: Время выполнения функций ГАЗА смещается. ГазComplete функция работает1.6 раз медленнее, чем самый медленный конкурент. Стандарт ГАЗArray.sort функция4 раз медленнее, чем самый медленный из двух других двигателей. СервисList To Map а такжеAdjust в итоге3 в разы медленнее (334 мс против 111 мс), чем самый медленный конкурент. Функции занимают 39,2% (1113 из 2759 мс) от функции построения графиков. Я не ожидал, что эти функции работают так медленно. Их можно оптимизировать, например, используя кеш. Предположим, что после оптимизации время выполнения этих функций будет 0 мс. В этом случае выполнение функции построения графика составляет 1646 мс.

Wishes: Если команда GAS сможет оптимизировать свой двигатель до скорости самого медленного конкурента, можно ожидать, что время выполнения уменьшится до 1 секунды или меньше. Также было бы здорово оптимизировать время для извлечения данных из электронной таблицы. Я понимаю, что электронные таблицы не предназначены для обработки большого количества данных, но в любом случае это увеличит общую производительность.

Ответы на вопрос(1)

Ваш ответ на вопрос