云开发进阶进阶在哪
入门篇讲了怎么用云函数、云数据库搭一个能用的后端。进阶要解决的是「数据一多、操作一杂,怎么不慢不乱」:批量操作、事务、云存储的大文件管理、还有权限边界。这些做到了,云开发才能扛住真实流量。
云开发的好处是不用自己运维服务器,但它的能力边界也要心里有数:不是什么规模都合适。数据量真的上了很大的量级,再考虑迁出自建后端。
这套思路不只云开发适用。任何后端服务,批量、事务、权限这三件事,都是绕不开的基本功。
进阶的核心是「少调几次、一次把事办完」。
入门到进阶,最容易卡住团队的不是某个接口,而是「不知道什么时候该批量、什么时候该用事务」。把这条判断想清楚,比记住多少个接口都管用。
- 云函数合并多次调用,一次做完一批事。
- 云数据库批量读写与事务,保证一致。
- 云存储大文件上传、分片与清理。
- 权限按集合和字段设好读写边界。
云函数:从单次调用到批量
最常见的低效写法,是前端在一个循环里反复调云函数,每调一次算一次冷启动、一次网络往返。正解是把这批操作打包到一个云函数里做。
// 不好:前端循环里逐个调云函数
// for (id of ids) { callFn(id) }
// 好:一次传一批,云函数里统一处理
exports.main = async (event) => {
const ids = event.ids;
for (const id of ids) { await doOne(id); }
return { done: ids.length };
};
批量别贪大,一次几百条封顶,太大会超时。真要更多就分批再来。
云函数还有冷启动的问题。如果一个函数要频繁调用,让它保持「热着」比每次冷启快得多。真到很高的调用频率,再去看是不是要换个更常驻的方案。
把这些常见低效写法改掉,后端响应往往能快上一个量级。
云数据库:批量读写与事务
云数据库提供批量写入和事务。涉及「要么全成、要么全不成」的操作——比如扣款加积分——一定要用事务,别靠多次写碰运气。
| 操作 | 说明 |
|---|---|
| 批量写入 | 一次插多条,省往返 |
| 事务 | 多步操作要么全成功要么全回滚 |
| 聚合 | 统计类查询用聚合,别拉到前端算 |
// 事务里同时改两个集合
await db.runTransaction(async (t) => {
await t.dec(goodsDoc, { stock: 1 });
await t.inc(userDoc, { score: 10 });
});
查询也有讲究。别一次把整张表拉回来再前端过滤,那样数据一多必卡。把筛选条件下推到数据库查询里,只拿真正需要的那几条。
云存储:文件上传与管理
图片、附件都放云存储。上传用上传接口,拿到 fileID 再存到数据库。大文件记得分片或压缩,别原图直传把流量打满。
- 上传前前端先压缩图片。
- 数据库只存 fileID,不存整个文件。
- 定期清理没用的旧文件。
云存储的文件访问可以带临时链接,别把永久直链到处贴。临时链接有时效,相对安全,也方便后续统一清理。
权限与安全
云开发的权限按集合、按字段配。别为了图省事全开「所有用户可读写」,那等于把数据库敞着。
// 敏感集合只允许服务端(云函数)读写
// 前端只走云函数,不直接连敏感表
凡是涉及钱、涉及他人数据的操作,都放在云函数里做,别让前端直接改库。
另一个实操点:云函数里要做参数校验,别信前端传进来的任何东西。前端校验是为了体验,服务端校验才是真正的安全。
常见云开发坑
| 坑 | 后果 | 应对 |
|---|---|---|
| 前端循环调云函数 | 慢、费钱 | 合并成批量调用 |
| 跨集合不用事务 | 数据不一致 | 用 runTransaction |
| 数据库全开权限 | 数据泄露风险 | 按集合收紧 |
还有一个容易被忽略的:云函数有执行时长和内存上限,重活别硬塞一个函数,拆成几步走。
云开发进阶清单
- 批量操作合并到云函数,控制单次规模。
- 跨集合写操作用事务。
- 统计走聚合,别前端硬算。
- 敏感表只放服务端访问。
- 云存储定期清理无用文件。
云开发不是不能扛量,关键是把批量和事务用对。