GAS性能比其他服务器端JavaScript慢

meg*_*024 10 google-apps-script

Google Sites网站上工作,它从电子表格中获取数据并动态构建多个图表,我提到Google Apps脚本运行速度很慢.我通过使用缓存服务来分析代码并对其进行优化.优化后,图表代码大约需要.3秒(2759毫秒是我见过的最快的时间之一)绘制了11行有127行的图表.这次是将所有数据放入缓存的情况.从电子表格中获取数据并将其放入缓存的第一个执行时间大约为10秒.配置代码在简单的地方需要足够的时间(几十毫秒).为了测量GAS性能,我编写了一个非常简单的过程,并在GAS环境中执行,如部署的Web应用程序和Caja Playground.我还向GAS问题跟踪器提交了一个问题.

Eric Koleda合理地提到,将服务器代码与客户端上运行的代码进行比较是不正确的.我重写了基准代码,结果如下.详细说明如下.

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引擎上运行包含不同函数执行时间的行.所有时间都以毫秒为单位.GAS执行时间在很大范围内漂移.在表中是我在5-10次执行中遇到的最快的时间.Complete我见过的最糟糕的时间是1194毫秒.源代码在这里.结果在这里.
  • rhino-1.6.5spidermonkey-1.7- 行包含与GAS使用ideone.com在相应的Javascript引擎上执行相同功能的执行时间.这些引擎的代码和时间在这里这里.

基准代码包含一些功能.

  • List To Map [listToMap] - 将对象列表转换为具有复合键的映射的函数.它来自站点脚本,需要大约.图表代码的9.2%(256/2559毫秒).
  • Adjust [adjustData_]- 一个函数,它将矩阵中的所有日期列转换为预定义格式的文本,转置它并将[[[a], [1]], [[b], [2]]]表格中的行转换为[[a, 1], [b, 2]]一个.它也取自脚本并消耗约.30.7%(2559毫秒中的857).
  • Sort- 标准Array.sort功能,它包含在测试中,以查看工作标准功能的快速性.
  • Quick Sort [quick_sort]- 这里采取的快速排序功能.它被添加到基准测试中以与Array.sort功能执行时间进行比较.
  • Complete [test] - 包括功能调用,准备测试数据和上述功能的功能.这个时间不是原始时间的总结.

结论: GAS功能执行时间漂移.GAS Complete功能比最慢的竞争对手慢了1.6倍.GAS标准Array.sort功能比其他两个引擎中最慢的慢4倍.该服务List To MapAdjust总结比最慢的竞争对手慢3倍(334毫秒vs 111毫秒).这些函数占图表函数的39.2%(1159,即2759毫秒).我没想到这些功能运行得如此之慢.例如,可以使用缓存来优化它们.假设在优化之后,这些函数的执行时间将为0 ms.在这种情况下,图表功能执行是1646毫秒.

愿望:如果GAS团队可以将其发动机优化到最慢竞争者的速度,则可以预期执行时间减少到1秒或更短.此外,优化从电子表格中获取数据的时间也很棒.我知道电子表格不是为处理大量数据而设计的,但无论如何,它都会提高整体性能.

Eri*_*eda 1

我已经能够复制这种性能,并且我会在收到有关该问题的更新后发布这些更新。