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

时间:2012-08-07 21:46:13

标签: google-apps-script

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

Eric Koleda合理mentioned,将服务器代码与客户端上运行的代码进行比较是不正确的。我重写了基准代码,结果如下。详情和解释如下。

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毫秒。源代码为here。结果为here
  • rhino-1.6.5spidermonkey-1.7 - 行包含与GAS相同功能的执行时间,但使用ideone.com在相应的Javascript引擎上执行。这些引擎的代码和时间为herehere

基准代码包含一些功能。

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

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

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

1 个答案:

答案 0 :(得分:1)

我已经能够复制这个表现了,我会在收到这个问题后发布更新。