Google Apps Script部署Web应用规避doPost并发执行限制方案
Google Apps Script 承接Chrome扩展高并发POST请求的最优方案
你当前Execute as: Me的配置确实会触发单账号30并发的硬限制,所有用户的请求全部占用你的账号配额,用户量过百就很容易出现请求失败的问题,以下是按改造成本从低到高排序的可落地方案:
方案1:切换执行身份为「访问应用的用户」(零成本,最优解)
这个配置完全适配Chrome扩展场景,核心优势是每个用户的请求占用用户自己的GAS配额,不会挤占你的账号额度,1000个活跃用户就对应30000的总并发上限,完全能支撑早期产品的流量,只需要注意3个配置要点:
- 重新部署Web应用时,执行身份选
User accessing this app,访问权限选Anyone with Google account - Chrome扩展端发请求时必须带上用户的登录态,否则会报权限错误,请求示例代码:
// 扩展端请求代码 const gasWebhookUrl = "你的GAS部署后生成的Web应用地址" const resp = await fetch(gasWebhookUrl, { method: "POST", credentials: "include", // 关键配置,自动携带用户Google登录Cookie headers: {"Content-Type": "application/json"}, body: JSON.stringify(yourPayload) }) - 首次调用时用户会看到Google官方的授权确认页,你只需要在扩展的首次使用引导里加一句说明,让用户点允许即可,授权后后续请求不会再弹出提示。如果你的脚本需要读写你私人的Google Sheet/Drive资源,提前把对应资源的共享权限开为「知道链接的人可编辑」即可,否则用户身份访问会报无权限。
方案2:前置队列削峰(适配必须以所有者身份执行的场景)
如果你的业务逻辑必须用你本人的身份执行(比如涉及敏感资源不能开放共享),不用改现有GAS代码,加一层轻量前置代理做并发控制即可:
- 用Cloudflare Workers做转发层,免费额度每天支持10万次请求,足够支撑早期产品。代理层逻辑非常简单:设置最大同时请求数为25(留5个冗余配额给你自己调试用),超出的请求在代理层排队,等前面的请求返回后再转发到GAS,用户侧感知到的延迟基本在几百毫秒,完全无影响。
- 额外优化:GAS端的
doPost函数尽量轻量化,收到请求先做参数校验,校验通过立刻返回200响应,把耗时的处理逻辑丢给定时触发器异步执行,能大幅缩短单请求的执行时长,变相提升并发承载能力。
方案3:流量规模过万后替换核心后端
如果你的日活已经过万,不建议继续用GAS做核心请求承接,GAS本身定位是轻量自动化工具,不是专业后端服务。可以把核心请求逻辑迁移到Cloudflare Workers/Google Cloud Run这类serverless服务,GAS只保留你自己用的后台自动化能力,serverless服务的并发上限可以轻松支撑几十万级别的请求,个人产品基本可以靠免费额度覆盖成本。
避坑提醒:不要尝试「多部署几个GAS应用轮询转发」的野路子,同一个账号下所有GAS应用的配额是共享的,不管部署多少个,总并发上限还是30,完全没有效果。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

