Performance 多个OnEdit函数的最佳实践

Performance 多个OnEdit函数的最佳实践,performance,google-apps-script,optimization,google-sheets,triggers,Performance,Google Apps Script,Optimization,Google Sheets,Triggers,问题 我有6个OnEdit函数,它们单独工作时按预期,但在一起时却不能按预期工作。我的意思是有些根本就不会触发 脚本的属性 它们有不同的名称-函数onEdit(e){code},函数onEdit1(e1){code},函数onEdit2(e2){code},函数onEdit3(e3){code},函数onEdit4(e4){code},函数onEdit5(e5){code} 它们都在同一个.gs选项卡中 其中一些变量相同。例如,OnEdit具有var range=e.range和OnEdi

问题

  • 我有6个OnEdit函数,它们单独工作时按预期,但在一起时却不能按预期工作。我的意思是有些根本就不会触发
脚本的属性

  • 它们有不同的名称-
    函数onEdit(e){code},函数onEdit1(e1){code},函数onEdit2(e2){code},函数onEdit3(e3){code},函数onEdit4(e4){code},函数onEdit5(e5){code}
  • 它们都在同一个.gs选项卡中
  • 其中一些变量相同。例如,OnEdit具有
    var range=e.range和OnEdit5具有
    var范围=e5.range
我的理解

  • 我相信您可以在同一个.gs选项卡中运行多个OneEdit函数。这是正确的吗?或者我需要创建新的.gs选项卡吗
  • 我认为我的onEdit函数应该以不同的方式命名,这样它们才能正确调用。这是正确的,还是我应该去掉不同的函数,把它们放到一个大函数中?(我想这会导致执行速度变慢,并且出现更多无法隔离错误代码的情况)
  • 我相信在每个函数中创建的变量都是特定于该函数的。这是真的吗?还是它们相互影响
我为什么问这个问题

这个问题的反复出现似乎是以前提过的。但人们通常会建议将两个功能集成到一个大功能中,而不是让某人准备集成10-20个不同的OnEdit功能。它们也没有给出最佳编码实践的明确指示

我花了几个小时通读这门课,觉得像我这样对脚本不熟悉的人会从中受益匪浅

提前感谢您的任何贡献

注:
  • 只有一个函数具有相同的名称。如果有两个,后者将覆盖前者。就好像前者从未存在过
  • 名为
    onEdit
    的函数在(您猜对了!)编辑时自动触发
  • 其他名称没有简单的触发器,例如
    onEdit1
    onEdit2
  • 简单触发器的执行时间限制为30秒
  • 因此,在单个
    code.gs
    文件中,甚至在单个项目中,只能有一个名为
    onEdit
    并成功触发的函数
  • 如果创建多个项目,
    onEdit
    将在每个项目中异步触发。但可以创建的项目数量是有限制的,其他配额也将适用
  • 或者,您可以使用已安装的触发器:它没有30秒的限制。您还可以为函数使用任何名称
  • 优化函数的最佳方法是,除非绝对必要,否则切勿触摸电子表格。例如,
    排序
    脚本中的各种值比多次在多个范围内重复调用
    .sort
    要好。工作表和脚本之间的交互越少越好。一个高度优化的脚本只需要调用两个电子表格:一个用于获取数据,另一个用于设置数据
  • 优化对工作表的调用数量后,可以优化脚本本身:控制逻辑,以便每次编辑只执行必要的操作量。例如,如果编辑在A1中(A1、B1是复选框,如果单击则分别清除A2:A10、B2:B10),则应检查是否单击了A1,如果单击,则清除范围并退出,不要再次检查B1。脚本优化至少需要具备JavaScript对象的基本知识。然而,这并不如减少通话次数有效,因为这是任何应用程序脚本中最慢的部分
参考资料:

最佳实践取决于每个函数的功能。所有语句都是If语句。作为一个快速总结,它们执行以下操作:e=.clearContent(),.uncheck(),.getFilter().sort。e1=.getFilter().sort。e2=.setValue(新日期()。e3=.copyTo(targetRange,SpreadsheetApp.CopyPasteType.PASTE_值,false),.deleteRow(range2.getRow().e4=.clearContent(),.getFilter().sort(12,true)。e5=.clearContent(),.uncheck(),.getFilter().sort(12,true)。我认为最好将所有的onEdit函数放在一个函数中,我更喜欢使用可安装的触发器。我也更喜欢在它们中尽可能少地执行操作。不需要太多的通信量就可以使它们变得毫无用处。这正是我希望得到的建议。谢谢。我也很感谢您的额外阅读。我已经我花了大量时间重新编写我的函数,并根据您的建议合并它们,现在我已经完成了,我可以说它可以按预期工作在一起。我已经设法优化了一些代码(调用更少)。但我仍然需要减少调用次数,并阅读更多关于可安装触发器的内容,以便实现这些。再次感谢您花费时间。我知道,随着我能力的提升,我实现您编写的所有内容的能力也会随之提升。@Adam很高兴为您提供帮助。@