什么是无头 CMS,你到底什么时候才真正需要它?
无头 CMS 把内容与呈现分离——而对于一个五页的宣传册网站,它是错的工具。本文讲清楚它到底什么时候才真正划算。
无头 CMS 负责存储你的内容,并通过 API 交付出去。它不渲染页面。没有主题、没有模板、没有前端——那部分由你自己来搭建。
定义就是这么简单。本文接下来讨论的一切,都是围绕这样的取舍对你是否划算,而诚实的答案大多是“取决于你有多少个前端”。
“头”就是负责渲染的那部分
在传统 CMS 中——WordPress、Drupal,以及你用过的大多数系统——内容存储和页面渲染同处一个系统里。你写一篇文章,CMS 把它放进数据库,然后同一个 CMS 用主题把它变成 HTML。方便,但也无法拆分。
“无头”意味着去掉渲染的那一半。剩下的是:
- 一个用来定义内容类型及其字段的地方
- 一个供撰稿人使用的编辑器
- 一个返回结构化内容的 API——是 JSON,不是 HTML
这个取舍很鲜明。你失去了免费的网站,换来的是不再被塑造成网页形态的内容——因此它可以被那些并非网页的东西所使用。
无头(headless)与解耦(decoupled)
这两个词你都会见到。严格来说,解耦式 CMS 仍然附带一个你可以选择使用的渲染层;而无头 CMS 完全没有。实际使用中人们把它们混用,这种区分很少会改变一个决策。
对任何产品都值得追问的问题其实更简单:它能渲染页面吗? 如果能,那么以无头方式使用它,就意味着你要运行一个渲染器,然后无视它的输出。
什么时候值得
你有不止一个前端。 一个网站、一个 iOS 应用、一个自助终端,还有一个想要数据源的合作伙伴。在传统 CMS 里,第二个消费方是个抓取难题;在无头 CMS 里,它只是第二个 API 客户端。
你有不止一个项目。 一家管理十个客户的代理机构、一个拥有五个品牌的集团、一个每位客户都需要各自内容的 SaaS。正是在这里,各家的计价模型开始明显分化——有些产品按项目、按数据集或按 space 计费,而到了第三个项目你就会尝到滋味。
你的内容不是页面形态的。 一个产品目录、一个文档站、一份更新日志、一个招聘板。如果你正在用自定义字段跟“文章”模型较劲,那你其实已经在缴税,却没享受到好处。
本地化是真需求。 不是“我们翻译了菜单”那种——而是多种语言真正并行的内容,每种语言有各自的发布状态。传统 CMS 靠插件来做这件事,无头 CMS 则把它当作字段级的属性。
前端性能是一个业务指标。 解耦让你可以提供预渲染的、可缓存的输出,而不必为每个请求现算一个页面。这不是自动发生的,但它变得可能了。
什么时候它是错的工具
这是大多数厂商文章会跳过的一节,因为他们在卖东西。
一个站点、一种语言、一个团队、没有开发者。 无头 CMS 把渲染工作转嫁给了你。如果没人去做这份工作,你就是花钱买了一个“减法”。用 WordPress 或者建站工具,把钱花在内容上。