【问题标题】:GAS performance slower than other server-side JavaScriptGAS 性能比其他服务器端 JavaScript 慢
【发布时间】:2012-08-20 02:28:02
【问题描述】:

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

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

引擎|列表到地图|调整|快速排序|排序|完成| 气体 | 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 毫秒。源代码是here。结果是here
  • rhino-1.6.5spidermonkey-1.7 - 行包含与 GAS 相同的函数的执行时间,但在使用 ideone.com 的对应 Javascript 引擎上执行。这些引擎的代码和时间是herehere

基准代码包含一些函数。

  • 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] - 采用here 的快速排序功能。它被添加到基准测试中以与Array.sort 函数执行时间进行比较。
  • Complete [test] - 一个函数,包括函数调用、准备测试数据和上述函数。此时间不是原始时间的摘要。

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

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

【问题讨论】:

  • 您是否多次进行过测试?结果是否一致?根据我的经验,执行时间变化很大,具体取决于无法控制且可能有多个参数
  • @Sergeinsas,当然,我多次执行这两个脚本。 GAS 执行时间为 8 秒或更长。 Caja 脚本执行时间约为 5 毫秒。
  • @Sergeinsas。 Here 是部署的 GAS 脚本,its source code
  • 谢谢,但我已经部署了它......我读取的值介于 8 秒之间,有时甚至高达 15 秒 ;-)。让我高兴的是,这似乎是线性的……将循环减少到 500000 只需要一半的时间。我很好奇 Google 团队成员如果这样做会说/解释什么。
  • @Sergeinsas,如果他们愿意,让我们等待 GAS 支持团队的答复。 :)

标签: google-apps-script


【解决方案1】:

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

【讨论】:

  • 埃里克,非常感谢。我已经阅读了问题跟踪器的答案。我同意比较 Caja(客户端)和服务器脚本是不正确的。我移植了我原来的“基准”脚本以在ideone.com 服务器上运行它。对于spidermonkey-1.7 引擎,结果是276 ms,对于rhino-1.6.5 引擎,结果是90 ms。我还创建了更多真实的例子——快速排序。结果是spidermonkeyrhinoGAS(code)。继续...
  • 伟大的研究,更好的比较。看起来 Apps Script 在那些快速排序测试中更具可比性,但仍然不是很好。
  • 现在我正在优化我的脚本,以摆脱非常明显的瓶颈并讨论性能,而不是理论上而是使用真实的脚本。
  • 我更新了我原来的帖子。现在,我认为,它更接近现实。
猜你喜欢
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多