在 Google Sheets 中,有没有办法在脚本实际终止之前“捕获”“脚本超时”异常并记录一些快速信息?

问题描述 投票:0回答:1

我有一个非常大的应用程序,用

TypeScript
编写,使用
Visual Studio Community
,我使用
CLASP
发布。有时,该应用程序的一部分可能运行速度非常慢并导致脚本终止。我正在尝试找出导致这些超时的原因。

  1. 我尝试写入日志并在

    Executions
    中查看结果。

    这让我可以看到脚本超时时的位置,但它确实没有突出显示代码的哪些部分正在减慢速度。

     

  2. 我将计时日志放在一起,希望能够跟踪性能问题。

    function doSomething() {
        let timer = new Timer();
        // Do Something
        timer.stop();
    }
    

    Timer
    对象通过解析堆栈自动识别函数并记录起始时间戳。
    stop
    方法记录结束时间戳并将一行追加到当前电子表格中的
    TIMING_LOG
    工作表中。

    这在小型测试中效果很好,但我很快意识到,仅将一行数据添加到单个工作表中的开销太高了!我无法实时记录每个计时日志。
     

  3. 我更改了

    stop
    方法,将计时日志数据简单地
    push()
    放入数组中。 在操作完成之前,我将所有这些日志行添加到
    TIMING_LOG
    工作表中。

    this.LogSheet
        .getRange(
            this.LogSheet.getLastRow() + 1,
            1,
            this.mLogLines.length,
            this.mLogLines[0].length
        )
        .setValues(this.mLogLines);
    
    this.mLogLines = [];
    

    这效果出奇的好,但不幸的是,当脚本超时时,日志行不会被附加。

我正在寻找某种信号,告诉我脚本正在终止。就像一个事件,我可以为其添加一个处理程序。 类似...

GoogleAppScript.addEventListener("terminating", handleTermination);
typescript google-apps-script timeoutexception
1个回答
0
投票

通过按钮自定义菜单项侧边栏可安装触发器运行的脚本的运行时间限制为六分钟。如果代码遵循最佳实践,那就足够了。

如果您的代码无法在运行时限制内运行,请参阅处理 Google Apps 脚本 6 分钟限制的简单方法

很多时候,糟糕的性能是由电子表格而不是脚本引起的。要提高电子表格性能,请参阅这些优化提示

© www.soinside.com 2019 - 2024. All rights reserved.