一尘不染

为什么我们使用SpreadsheetApp.flush();?

javascript

我是一个完整的初学者。

我已阅读了有关解决方案的Google文档。我在互联网上搜索了同样的内容。

但。一切似乎都是技术性的。

据我了解,.Flush有助于在功能出现时立即执行这些功能,而无需将它们捆绑在一起。

我对吗? 如果不是的话,外行人的含义是什么?并请举一个简单的例子。谢谢。


阅读 380

收藏
2020-05-01

共1个答案

一尘不染

程序员flush()在希望确保在继续之前将先前代码的输出和/或效果写入电子表格时会使用。如果您不这样做flush(),则可以通过使用一些内置的缓存和操作绑定来自动“优化”代码。一般情况下,你不需要使用flush(),直到您特别
DO 需要......如果是有道理的。

首先,您的官方文档是:

flush()

应用所有待处理的电子表格更改。电子表格操作有时会捆绑在一起以提高性能,例如在多次调用Range.getValue()时。但是,有时您可能想要确保立即进行所有待处理的更改,例如在执行脚本时向用户显示数据。

怎么样解释类似的类比:假设您要在一个有100个苹果的树上算苹果。

可以分别 计算和记录每个苹果,如下所示:

123456…等等。

这就像flush()在循环中进行,因为您实际上是在每次count操作之后进行编写。您最终将在纸上书写 100次
,并且假设用手写的时间要比用眼睛数的时间更长。

一个“优化的”过程(在这种情况下)是在记下数字之前使用您的内存/缓存并计算5个苹果,因此您应该

5101520…等等。

现在,您将最终在纸上书写 20次(减少了80%),尽管必须计算相同数量的苹果,但您却减少了必须执行的写操作次数,因此您将获得惊人的性能通过减少运行时间而受益。

这大致可转换为Apps脚本操作的工作方式。与所有计算一样,内存中操作执行最快,而读/写(aka输入/输出或I /
O)操作最慢(请检查执行记录以获取进一步证明)。这就是为什么只flush()在特别需要在代码执行的特定点将数据写入电子表格时才使用它的原因。

希望这可以帮助。

2020-05-01