arrays - setValues 是否比 setValue 慢?
问题描述
我有一个 Google Doc,其中包含运行多个人贡献的 Google Apps 脚本脚本。onEdit
当人们编辑工作表时会触发一个触发器。据我了解,如果有人编辑工作表,则会触发我的onEdit
触发功能。
如果第二个人在第一次onEdit
完成处理之前编辑工作表,则它会停止第一个实例,第二个实例onEdit
开始而不完成第一个实例。
为了避免这种情况,我试图让我的代码尽可能高效,因为如果这个onEdit
过程花费更少的时间,它就不太可能重叠。为了做到这一点,我试图最小化我的读/写。使用一系列记录器语句,我跟踪了耗时的代码行。我注意到我的setValues()
一条线需要将近 6 秒才能运行。在我对其进行调整后,这是一个大数组被发布回工作表。
我的问题:
- 一个
setValues()
电话需要比一个更长的时间setValue()
吗? - 小数组的调用是否
setValues()
比setValues()
大数组的调用时间短?
我知道一个会比 1000 个命令setValues()
快得多。setValue()
我曾假设无论大小如何,一次写入工作表都应该花费大约相同的时间。有什么办法可以减少这个时间吗?
解决方案
Q1: a
setValues()
需要比 a 更长的时间setValue()
吗?
A1:没有。关于这一点,你可以从下面的实验结果中看出。
Q2:小数组的调用是否比大数组的
setValues()
调用时间少?setValues()
A2:是的。关于这一点,你可以从下面的实验结果中看出。
Q3:我认为无论大小如何,一次写入工作表都应该花费大约相同的时间。有什么办法可以减少这个时间吗?
A3:当你想减少更多的值的过程成本时,使用 Sheets API 怎么样?关于这一点,您可以在“A2”图中看到。
笔记:
上述答案的基本原理是Benchmark: Reading and Writing Spreadsheet using Google Apps Script。
正如@TheMaster 的评论,我也认为LockService可能会解决您的问题。
- 我认为在stackoverflow上可以看到LockService的示例脚本。参考
推荐阅读
- swift - 当您有多个视图控制器时如何检测到横向的转换
- .htaccess - 如何从 .htaccess 重写中排除目录
- react-native - 导航到另一个屏幕时,未定义不是对象(评估“this.props.navigation.navigate”)
- r - 在 R 中读取带有波斯语(波斯语)列的 *.CSV 文件
- node.js - 将此消息发送到您的机器人时出错:HTTP 状态代码 NotFound
- javascript - 在 Windows 中运行 Javascript 代码以创建条形图
- c# - C#禁用文本框关注表单加载
- python - 生成令牌时出现错误“缺少授权类型”
- observable - Angular7 - 如何使用 Observable 并添加属性
- android - 如何配置我的 ESP8266 如此独特,Android 应用程序只能通过 smartConfig 扫描和连接它