应用程序脚本缓慢调用多次调用具有多个范围的相同函数,它调用 getValues

Posted

技术标签:

【中文标题】应用程序脚本缓慢调用多次调用具有多个范围的相同函数,它调用 getValues【英文标题】:App Script slow with many calls the same function that has several ranges which it calls getValues 【发布时间】:2021-11-19 17:19:40 【问题描述】:

我将谷歌电子表格中的一个复杂公式转换为一个自定义函数,以简化算法的可读性和调整。但是,函数调用比电子表格公式慢很多。我认为这是因为我有几个 getValues 调用,它们拉入了几个查找表。由于我调用此函数 1000 多次,因此最终在相同范围内有很多 getValues。这些查找表偶尔会被修改,但大部分是静态的。

在 Excel 中,您可以在文件打开时将这些值加载到全局变量中,并根据需要使用子例程调用(和电子表格按钮)进行更新。在 Google Apps 脚本中有什么方法可以做到这一点?

【问题讨论】:

自定义函数非常慢。您需要多久进行一次实时计算?让它每小时或十分钟或在您打开电子表格时计算编码端的每个单元格而不是使用自定义函数可能更有意义。 见best practices 【参考方案1】:

不要在 1000 个公式中插入自定义函数,而是修改自定义函数,使其接受 1000 行的范围并通过一次调用返回 1000 个结果。见custom function optimization tips。

或者,将慢速电子表格公式实现为执行相同操作的数组公式 - 一个公式一次性填充整个列或范围。启用数组的公式可以使用范围和 array expressions 。这些 Google 表格函数接受和/或返回结果数组,即使没有 arrayformula() 包装器:filter()sort()sortn()index()query()unique()transpose()indirect()offset()flatten()split()mmult()iferror()ifna()switch()choose()isbetween()importrange()array_constrain()frequency()growth()linest()logest()minverse()trend()daverage()dcount()dcounta()dget()dmin()dmin()dmin()dmin() 987654356@、dstdevp()dsum()dvar()dvarp()

【讨论】:

以上是关于应用程序脚本缓慢调用多次调用具有多个范围的相同函数,它调用 getValues的主要内容,如果未能解决你的问题,请参考以下文章

多次调用Angular Service单例构造函数

使用 Mockito 多次调用具有相同参数的相同方法

使用 Mockito 多次调用具有相同参数的相同方法

对不同对象中的函数使用相同的键时,V8 中的函数调用缓慢

GWT:客户端过程和 rpc 请求总是被多次调用,具有多个线程 id

如何使用 std::thread C++ 生成多个调用相同函数的线程 [关闭]