通过Fetch请求调用Google Apps Script函数速度过慢的优化咨询
问题描述
我尝试在main.js中调用绑定到Google文档的Apps Script函数(比如测试函数testingEnv):
const testingEnv = ()=>{ body.insertParagraph(0, "Hi mom"); }
为此我编写了调用函数callGoogleAppsScript:
const callGoogleAppsScript = async (token, functionName, paramToSend) => { const scriptId = '我的文档ID'; const postLinkGoogleScript = `https://script.googleapis.com/v1/scripts/${scriptId}:run`; const payload = { function: functionName, parameters: [paramToSend], // 用于给函数传参 }; try { await fetch(postLinkGoogleScript, { method: 'POST', headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json', }, body: JSON.stringify(payload), }); } catch (error) { console.log('出问题了:', error); return false; } };
通过callGoogleAppsScript(token, 'testingEnv');调用该函数,token和scriptId均有效。功能可正常运行,但在Docs中执行需3-4秒,而main.js里的测试请求耗时仅10ms。我曾以为是Google API传输问题,但直接调用Docs API的GET/POST请求能即时完成,因此问题出在直接调用GAS函数上,该如何解决?
解决方案
- 替换GAS逻辑为直接调用Docs API:既然直接调用Docs API速度更快,把
testingEnv里的操作(比如插入段落)直接放到前端通过Docs API的documents.batchUpdate接口执行,完全绕过GAS,从根源上避免GAS的启动延迟。 - 缓解GAS冷启动延迟:如果必须使用GAS,可将绑定型脚本改为独立脚本,授权其访问目标文档;同时设置定时触发器定期唤醒脚本,减少冷启动的触发概率——但这种方法只能缓解,无法彻底消除延迟。
- 精简GAS函数逻辑:检查
testingEnv是否存在冗余操作,比如全局变量初始化、重复授权等,将这些冗余代码移除,尽量让函数逻辑更轻量化。例如把全局获取的body改为在函数内部按需获取,减少初始化耗时。
内容的提问来源于stack exchange,提问作者VladTbk321
相关产品推荐
相关产品推荐

