10

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

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

引擎|列表到地图|调整|快速排序|排序|完成|
气体 | 138| 196| 155| 38| 570|
犀牛-1.6.5 | 67| 44| 31| 9| 346|
蜘蛛猴-1.7| 40| 36| 11| 5| 104|
  • GAS- 一行包含在 GAS 引擎上运行的不同函数的执行时间。所有时间都以毫秒为单位。GAS 执行时间在相当宽的范围内漂移。表中是我执行 5-10 次的最快时间。Complete我见过的最糟糕的时间是 1194 毫秒。源代码在这里。结果在这里
  • rhino-1.6.5和- 行包含与使用ideone.com在对应的 Javascript 引擎上执行spidermonkey-1.7的相同函数的执行时间。这些引擎的代码和时间在此处此处GAS

基准代码包含一些功能。

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

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

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

4

1 回答 1

1

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

于 2012-08-14T21:12:46.567 回答