【问题标题】:Read/Write from Sheets is suddenly incredibly slow从表格读取/写入突然变得异常缓慢
【发布时间】:2021-07-09 18:39:12
【问题描述】:

我有一个大型脚本项目,我已经从事了几年的工作,我们公司正在使用它来跟踪制造环境中的生产。通常,为跟踪工具加载 Web 界面的 doGet 函数将在 5-15 秒内执行,并且非常快速且响应迅速。但是,从昨天早上开始,该函数每次执行需要 60-90 秒,有时 Web 应用程序根本没有打开(即使我在 doGet 函数的日志中没有遇到故障)。我从上周开始休假,我是唯一可以访问代码的开发人员,因此代码库中没有任何变化,Google 工作表中的基础数据似乎没有任何重大变化要么。

我已缩小范围,发现从/向 Google 表格读取/写入数据是速度变慢的主要原因。我正在使用 getValues() 批量读取数据,但是在 ~850 行 x 9 列上对该函数的一次调用现在需要将近 20 秒,其中 doGet 函数(包括 3-4 个 getValues 调用)运行比几天前还少。

我完全不知道如何调试这个问题。如果有帮助,这里是我的 doGet 函数开头的几行代码。该函数还有更多内容,但我可以查看 Logger 语句上的时间戳来判断此 getValues 运行速度太慢。

  var ss = SpreadsheetApp.openById("SPREADSHEETIDHERE");
  var pst = ss.getSheetByName("Panel Status Tracker");
  Logger.log("Start Panel Data Get")
  var panelData = pst.getRange(9, 1, pst.getLastRow()-8, 8).getValues();
  Logger.log("End Panel Data Get")

TIA!

【问题讨论】:

  • 几行代码不是minimal reproducible example
  • 感谢库珀的反馈,但我不确定还能提供什么。 doGet 中的 getValues 调用运行良好,但现在不行。出于安全原因,我不能让其他人访问我的工作表以运行我的脚本,所以我试图找出为什么读取操作突然运行如此缓慢。在此之前我的代码中没有任何其他被调用的代码,虽然在它之后有代码被调用,但时间戳已经确定我发布的 sn-p 中存在问题。
  • 那么我建议学习如何更好地使用调试器或 Logger.log() 或 console.log。看来您将不得不解决自己的问题
  • Cooper 实在是太无益了,感谢社区的热烈欢迎。我不确定 Loggers 会提供什么其他信息,因为它只是对 Google 服务器的调用突然大幅减慢的情况,但如果你能指出我的资源,我总是很高兴学习。
  • 您分享的代码是来自谷歌应用程序脚本文档的简单代码,我想您已经知道它在哪里了。如果您可以提供 minimal reproducible example ,您的问题就没什么好说的了。

标签: google-apps-script google-sheets


【解决方案1】:

这些症状通常表明工作表中的行数增加了。删除工作表底部所有不需要的空白行,看看是否有帮助。

如果空白行不断重复出现,则很可能是您在工作表中的某个位置存在错误的数组公式,从而导致失控扩展。

【讨论】:

  • 感谢您的想法,但工作表底部没有空白行,我会密切注意以确保它不会引起问题。
【解决方案2】:

尝试在代码的各个部分添加 console.time('sec1') 和 console.timeEnd('sec1') 以确定哪个部分花费的时间最多。如果您找出代码部分,请尝试通过在该部分中添加子部分来找出确切的行。

console.time()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多