云函数执行超时由服务端配置决定,需在云函数目录的package.json中通过"cloudfunction-config"字段设置"timeout"(单位秒,默认10秒,最大60秒),修改后须重新上传部署才生效。

云函数超时时间在哪配?不是前端调用时设的
云函数执行超时由服务端配置决定,uniCloud.callFunction 里的 timeout 参数只控制「前端等待响应的时长」,不影响云函数本身是否被强制终止。真正决定函数会不会被杀掉的,是云函数在服务空间里的执行时限。
这个时限默认是 10 秒(阿里云/腾讯云均如此),不可通过前端传参修改,必须在云函数目录下的 package.json 中显式声明:
-
"cloudfunction-config"字段下加"timeout": 30(单位:秒),最大支持 60 秒 - 改完要重新上传部署,本地调试不生效
- 注意:HBuilderX 3.8.5+ 才完整支持该字段,旧版本可能忽略
内存大小怎么调?直接改 package.json 就行
云函数默认内存是 512MB,但多数轻量逻辑(比如查数据库、简单计算)根本用不到。调低内存能直接降低 GB·s 计费,实测从 512MB 改成 128MB,费用可压到原来的 1/4。
配置方式和超时一样,都在云函数根目录的 package.json 里:
- 添加
"memorySize": 128(单位:MB),可选值为 128 / 256 / 512 / 1024 / 2048 - 阿里云和腾讯云都支持,但支付宝云暂未开放该配置项
- 改完必须重新部署,否则控制台看到的仍是默认值
- 如果函数运行中报
Process out of memory或频繁 OOM,说明真需要更高内存,别硬压
为什么改了没生效?常见部署盲区
改完 package.json 却发现控制台显示的还是默认配置,大概率卡在这几个环节:
- 没右键云函数目录 →「上传并部署」,只是保存了文件,没推送到云端
- 部署时 HBuilderX 提示「跳过上传」,因为检测到无代码变更——但
package.json变更不会触发自动识别,必须手动强制上传 - 控制台看到的配置是上一次成功部署的快照,日志里查
context.memorySize才是真实运行值 - 使用了公共模块(如
uni-id),但只改了主函数的package.json,没同步改依赖模块的配置
超时和内存一起调,得看函数实际负载
不能只盯着数字往下砍。比如一个要做图片压缩的云函数,设成 128MB + 10 秒,大概率执行失败;但一个纯数据库查询函数,128MB + 15 秒就绰绰有余。
判断依据很实在:
- 看云函数日志里的
duration(实际耗时)和memory used(峰值内存) - 如果
duration稳定在 2–3 秒、memory used不超过 80MB,那 128MB + 15 秒就是安全水位 - 如果日志频繁出现
Task timed out,优先加timeout;出现JavaScript heap out of memory,才加memorySize
配置不是一劳永逸的事,用户量上来后得回来看日志再微调。











