如何在Google Script中获得最佳性能?

时间:2017-01-09 23:45:56

标签: performance google-apps-script

正如您所知,Google只为触发的脚本提供了1小时的执行时间(网络应用和手动呼叫不在这一小时内)。 我没有找到如何提高脚本性能的好解释,所以我必须自己找出它。这对我有什么帮助:

1 个答案:

答案 0 :(得分:1)

10个提示&在Google Script

中获得最佳性能的技巧

有关于如何编写脚本的官方Google best practices官方文档。然而,它不是那么全面,并且错过了一些重要的提示和解释,您将在此处另外找到。

  1. 尽可能少地使用耗时的方法。 任何被Google视为耗时的方法,您始终可以在执行报告enter image description here中找到。
    一些耗时方法的例子:
    • 将信息读取/保存到工作表的方法:getValuegetValuesgetDisplayValuegetRangeByNamegetSheetsetValuedeleteRow等等。有些消耗更多,有些消耗更少。
    • 使用其他外部服务的方法,例如GmailAppUtilities等。
    • 文档/脚本属性(但它们比从表格中获取数据要快一些。)
  2. 如果您使用图书馆,请不要忘记在编辑完成后创建新版本的图书馆,并在调用脚本时关闭开发者模式(抱歉非英文截图)。在我的情况下,加速虚拟脚本启动(当脚本收到信号时,它应该停止) 3次enter image description here
  3. 代码中未包含在任何函数中且可以有条件执行的代码部分必须分组为初始化函数,并在满足条件时调用。这实际上可以应用于代码的任何部分。问题在于,无论是在基本项目中还是在库中,都会执行位于任何函数之外的代码。
  4. 尽可能使用批处理操作。 100个单元格上的一个getValues()比每个单元格上的100 getValue()快得多。 deleteRows()setValues()等相同。
  5. 如果您使用许多脚本/文档属性,也请使用批处理方法。
  6. 如果您使用许多静态命名范围,请为它们创建一个缓存并从中创建一个对象(哈希数组)。制作一个更新程序,并在需要时使用它。我的项目有137个命名范围:这一点产生了巨大的影响。 enter image description here
  7. 如果可能,请避免使用sleep方法。
  8. Google建议使用fetchUrl use cache for web pages(如果适用)。
  9. Google建议在UI heavy scripts中避免使用库(例如,当您使用基于Google表格操作的触发器时)。
  10. 如果您的触发脚本不能24小时工作,请为其制定工作计划并将脚本路由到轻量级程序。
    实施例
  11. 
    
    if ((new Date()).getHours() < 9) {
      var TriggeredEveryMinuteFunction = function() {
        //...do some lightweight stuff or nothing...
      }
    } else {
      function TriggeredEveryMinuteFunction() {
        //  ...do some heavy stuff...
        func2();
      }
    
      function func2() { /*some more stuff*/ }
      var func3 = function() { /*some more stuff*/ }
      var etc() { /*some more stuff*/ }
    }
    &#13;
    &#13;
    &#13;

    在此示例中,函数func2func3etc 未编译,当它小于9 o时。 如果你试着打电话给他们,你就会找不到&#34;没找到&#34;消息。