声明 Google Apps 脚本变量的最佳做法

Best practice for declaring Google Apps Script variables

我目前正在使用 Google Apps 脚本开发 Web 应用程序。我有足够的能力完成我需要做的事情,但这是我第一次以任何规模开发任何东西,我正在寻找一些关于性能最佳实践的指导(如果它有所作为的话) .

我有许多变量(从各种 sheet 加载数据)需要被多个函数多次访问。过去,我总是在任何函数之外将它们声明为常量,因此我可以使用任何函数来访问它们。例如:

const SS = SpreadsheetApp.getSpreadsheetById("spreadsheetId");
const SHEET1 = SS.getSheetByName("sheetName");
const DATA1 = SHEET.getRange(blah, blah, blah, blah).getValues();
const SHEET2 = SS.getSheetByName("sheetName");
const DATA2 = SHEET.getRange(blah, blah, blah, blah).getValues();

sheet 和数据都会被各种函数多次访问。但是,有 6 或 7 个 sheet 和数据集将由各种函数访问。他们将访问多组数据(如果需要代码片段,则直接从 sheet 获取范围),但没有函数会同时访问所有这些数据。这些变量是否仍然加载,即使函数不需要它们?

例如,我有一个 运行onFormSubmit 的函数。我希望尽快 运行。它只访问 7 个 sheet 之一。这是否会在 运行 时初始化所有全局变量,即使它们不是必需的?

我想我已经成功地回答了我自己的问题。在 GAS IDE 中使用调试器。我的一个函数只使用数据的一个片段,看起来它正在加载我的所有变量。

来自问题

Are those variables still loaded, even if the function doesn't require them?

视情况而定。如果常量声明“在任何函数之外”(这称为全局作用域)并且函数属于同一个项目,那么答案是肯定的,但如果常量在库中声明,它们将不可用于主要项目。

For example, I have a function that runs onFormSubmit. I want that to run as fast as possible. It only accesses one of the 7 sheets. Will that be initializing all of the global variables when it runs, even though they're not required?

是的。


由于调用 Google Apps 脚本服务在执行时间方面“很昂贵”,为了使您的脚本高效并考虑到可安装的触发器有每日限制,请避免进行没有限制的调用用于全局范围内的每个函数。