Работая на сайте Google Sites
, который берет данные из электронной таблицы и динамически создает несколько диаграмм, я упомянул, что Google Apps Script работает довольно медленно. Я профилировал код и оптимизировал его, используя Cache Сервис, где это возможно. После оптимизации код диаграммы занимает ок. 3 сек. (2759 мс - одно из самых быстрых времен, которое я когда-либо видел), чтобы нарисовать 11 диаграмм, имеющих 127 строк. И это время для случая, когда все данные помещаются в кеш. Первое время выполнения, которое извлекает данные из электронной таблицы и помещает их в кеш, составляет около 10 секунд. Профилированный код требовал достаточно времени (десятки миллисекунд) в простых местах. Чтобы измерить производительность GAS, я написал очень простую процедуру и выполнил ее в среде GAS, как развернутое веб-приложение, и в Caja Playground, Кроме того, я отправил issue в отслеживание проблем 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
- строка, содержащая времена выполнения различных функций, запущенных в движке GAS. Все время в миллисекундах. Время выполнения ГАЗ задерживается в довольно широких пределах. В таблице самые быстрые времена, которые у меня были в 5-10 исполнении. Самое худшее времяComplete
, которое я видел, составляло 1194 мс. Исходный код здесь. Результаты здесь. -
rhino-1.6.5
иspidermonkey-1.7
- строки содержат время выполнения тех же функций, что иGAS
, но выполняются на соответствующих механизмах Javascript, используя ideone.com. Код и время для этих движков здесь и здесь.
Контрольный код содержит несколько функций.
-
List To Map [listToMap]
- функция, которая преобразует список объектов в карту, содержащую составной ключ. Он взят с сайта Script и занимает ок. 9,2% (256 из 2759 мс) графического кода. -
Adjust [adjustData_]
- функция, которая преобразует все столбцы дат в матрицу в текст в предопределенном формате, переносит ее и преобразует строки из формы[[[a], [1]], [[b], [2]]]
в[[a, 1], [b, 2]]
. Он также берется из Script и потребляет ок. 30,7% (857 из 2759 мс). -
Sort
- стандартная функцияArray.sort
, она включена в тест, чтобы увидеть, как быстро работают стандартные функции. -
Quick Sort [quick_sort]
- функция быстрой сортировки, принятая здесь. Он добавляется к эталону для сравнения с временем выполнения функцииArray.sort
. -
Complete [test]
- функция, которая включает вызовы функций, подготовку тестовых данных и упомянутые выше функции. На этот раз не резюме времени в raw.
Заключение: Время выполнения функций функции GAS дрейфует. Функция GAS Complete
работает 1,6 раз медленнее, чем у самого медленного конкурента. Стандартная функция Array.sort
стандарта GAS 4 раз медленнее, чем самый медленный из двух других двигателей. Сервис List To Map
и Adjust
в целом 3 раза медленнее (334 мс против 111 мс), чем самый медленный участник. Функции принимают 39,2% (1113 из 2759 мс) функции построения диаграмм. Я не ожидал, что эти функции будут работать так медленно. Их можно оптимизировать, например, используя кеш. Предположим, что после оптимизации время выполнения этих функций будет 0 мс. В этом случае выполнение функции построения графика составляет 1646 мс.
Пожелания: Если команда GAS может оптимизировать свой движок до скорости самого медленного конкурента, можно ожидать, что время выполнения сократится до 1 секунды или меньше. Также было бы здорово оптимизировать время для извлечения данных из электронной таблицы. Я понимаю, что электронные таблицы не предназначены для обработки большого количества данных, но в любом случае это увеличит общую производительность.