AI 教我在 NextJS 手搓 图片资源代理,说是比 Vercel 便宜 90%。
使用场景就是从别的平台获取到的 imageUrl 想直接在自己的网站上使用,但直接放在 src 是无法显示的,就需要通过服务器代理得到。
Vercel 的 Image 组件自动实现图片资源代理功能,就是那个总要去 next.config.js 配置的图片路由的东西。Vercel 文档中写到该优化服务在免费计划有 1000 次额度,Pro计划有 5000 次。可以通过 unoptimized 属性关掉优化。
实现方案不难,就是创建一个 api 端点:1. 接收图片原本 url 2. 读取图片 3. 返回图片 (代码见图)
<img src="<后端端点>?url=<imageUrl>" />
我也让 AI 试着算了算仅图片资源代理场景下的花费对比,但还需要验证,便宜 90% 说法来自这里,待我用一段时间来验证验证。说不定会发现一些 tricks。
---
尝试计算一下这样的开销会不会变得很大,定量说说,因为我想知道花费
让我计算一下使用图片代理的具体开销:
带宽消耗:
CopyInsert
头像平均大小:~20KB
每次代理请求:
- 下载:20KB(服务器从B站下载)
- 上传:20KB(服务器发送给用户)
总计:40KB/请求
假设每月10,000次头像请求:
每月总流量 = 40KB × 10,000 = 400MB
服务器资源:
CopyInsert
每个请求的内存占用:
- 临时缓冲:~20KB(存储图片数据)
- 程序开销:~1MB(Node.js 进程)
CPU使用:
- 每个请求处理时间:~100ms
- 主要用于:网络 I/O,不涉及图片处理
具体成本(以 Vercel 为例):
CopyInsert
Vercel 免费计划包含:
- 带宽:100GB/月
- 执行时间:100小时/月
- 函数调用:100,000次/月
我们的使用量(每月10,000次请求):
- 带宽:400MB(远低于限制)
- 执行时间:~0.28小时(10,000 × 100ms)
- 函数调用:10,000次
结论:完全在免费计划范围内
自托管成本估算:
CopyInsert
最小规格服务器(1GB RAM,1核CPU):
- DigitalOcean: $5/月
- AWS t2.micro: ~$8/月
- 带宽成本:基本包含在套餐内
实际成本:
- 服务器:$5/月
- 带宽:包含在基础套餐中
- 总计:$5/月
与直接使用 Next.js Image 优化对比:
CopyInsert
Next.js Image 优化(Vercel Pro):
- 基础费用:$20/月
- 图片优化:包含5,000次/月
- 超出部分:$5/1,000次
我们的代理方案:
- 免费计划:$0/月
- 自托管:$5/月
结论和建议:
如果使用 Vercel 托管:
选择代理方案,完全免费
每月10,000次请求只用到免费额度的 10%
如果自托管:
每月固定$5,不受请求量影响
适合请求量大的情况
成本优势:
比 Next.js Image 优化便宜90%以上
不需要担心超额费用
可以轻松扩展到其他图片源
这个方案的成本效益比非常高,特别是在你的使用场景下(只需要访问图片,不需要优化)。你觉得这个成本分析合理吗?需要我详细解释某个部分吗?