title: Jamstack categories: [software-engineering]
只是一个概念, 可以描述一类架构.
JAM = JavaScript + APIs + Markup
在网页应用中, HTML 是通用的 Markup language.
首先前后端分离, 不是 PHP 擅长的那种服务器端渲染.
然后需要将前端代码自动构建为 HTML 及相关部署在 CDN 上.
按说, 完整的写法应该是 J.A.M. Stack
, 简单的写法是 JAMStack
或 JAMstack
.
但是 jamstack.org 和 Netlify 给出的写法是 Jamstack
.
我们曾用过 Next.js 的 Static Exporting 功能做过类似的网站. 但还是有一些的限制的, 后来就再没用过.
现在我们更倾向于 code splitting + lazy loading 这种方案. 与 JAM 最大的不同就是 没有 M. 不是在构建的时候生成了多个 HTML, 还是用 JavaScript 生成 DOM, 也就是 Markup.
我们选择不使用静态 HTML 的问题主要是路由, 普通内容站可以说在构建的时候就规划好了 所有页面, 但功能性站点可不是.
比如一个用户的信息页面我们希望是 https://site/people/jim
, 但我们在构建的时候
并不真的清楚有多少个用户, 用户都在 API 中获取. 如果要用 HTML 页面和普通 CDN,
我们只能选择 https://site/people?user=jim
这样的方式.
Jamstack 仅适用于内容型站点. 类似的概念不是什么新东西了, 大多数 CMS 都是这样的.
Jamstack 是由 Netlify 提出的概念.
在 Netlify 的网站上, 有专门介绍 Jamstack 的页面: https://www.netlify.com/jamstack/.
对于内容展示型网站来说, 如果能遵循原子部署, 那么即便数据量巨大, 理论上也是可以 使用 Jamstack 的.