Storyblok 价格陷阱:什么时候会被强制升级?
Storyblok 的计费维度主要在三个轴心上:Seats(登录 Studio 的用户数)、Locales(语言数量)和 API calls(CDN 请求数)。这里有个非常关键的细节:它是按 Space(空间)计费,而不是按组织计费。如果你是个接单的开发者,给不同客户开不同的 Space,每个 Space 都要独立付钱。
为了让大家有个直观概念,我把目前的几个档位实测情况列出来(注:年付比月付大概便宜 17%-20%):
- Community (免费版): 0元。包含 1 个用户,1 种语言,每月 10,000 次 CDN 调用。没有自定义角色。
- Starter: 约 23 美元/月。包含 1 个用户,3 种语言,每月 25,000 次 CDN 调用。
- Growth: 约 99 美元/月。包含 3 个用户(超出部分 15 美元/人),5 种语言,每月 1,000,000 次 CDN 调用。
- Business: 约 299 美元/月。包含 5 个用户(超出部分 25 美元/人),10 种语言,API 调用不限,且支持自定义角色。
- Enterprise: 定制价格,支持 SSO 和无限语言。
很多人觉得免费版的 10k API 调用很多,但在实战中这其实是个巨大的坑。
举个具体的计算场景:假设你用 Next.js 搭建了一个站点,首页需要调用 Storyblok 的 CDN 接口获取 12 个 Story(比如文章列表、页脚、导航等)。这意味着每一个真实访客进入首页,就会产生 12 次 API 调用。如果你一个月只有 1,000 个访客,调用量就是 12,000 次,直接就爆了免费额度。
虽然开启 ISR (Incremental Static Regeneration) 可以在 Vercel 等 CDN 层做缓存,降低直接请求 Storyblok 的频率,但在缓存失效重新验证的窗口期,请求依然会直接打到 Storyblok。对于有真实流量的生产环境,免费版几乎不可能撑住。
另外,升级的“触发点”非常机械:
1. 国际化需求: 只要你想加第二种语言,必须至少升级到 Starter。
2. 协作需求: 只要你的客户或者第二个编辑需要登录后台,你就得直接跳到 Growth 档(因为 Starter 依然只给 1 个 Seat)。
对于大多数 Agency 或产品团队来说,Growth 档才是真正的“起步价”。100 万次的 API 调用额度对中型站点足够了,而且 3 个初始席位能覆盖一个小团队。
如果你在部署时遇到 API 额度报警,建议先检查一下你的 getStaticProps 或 getServerSideProps 里的调用逻辑,看看是不是有重复请求。一个简单的优化方案是合并请求或增加缓存层。
// 这是一个简单的 Next.js 示例,展示如何通过缓存减少 API 调用
export async function getStaticProps() {
// 避免在循环中多次调用 API
// 建议使用 Storyblok 的单一请求获取所有所需数据
const data = await storyblokClient.get('home', {
version: 'draft', // 仅在预览模式使用 draft,生产环境务必用 published
});
return {
props: { story: data.story },
revalidate: 3600, // 设置 1 小时缓存,减少对 Storyblok CDN 的压力
};
}总之,Storyblok 的免费版适合做 PoC 或个人 Demo,但如果是接商业项目,建议直接把 Growth 档的预算报给客户,否则项目上线流量一上来,升级压力会让你很被动。