什么是 Jamstack?
Jamstack 并非一个具体的技术,而是一个概念。
在了解 Jamstack 之前,我们先了解一下:
- 网页动静之分
- 动态内容静态化
网页动静之分
如果网页内容都由 html 静态资源提供,那么 web 是静态的。 否则,如果网页内容是通过查询后端服务,由浏览器实时渲染出来的,那就是动态 web。
静态网页具有以下优点:
- 对资源占用极少
- 可缓存,如 CDN 等
- 易被搜索引擎收录
动态内容静态化
存在另外一种情况,那就是内容并不是完全动态的,有一些动态内容具备以下特征:
- 内容的变更并不频繁,只在少数情况下需要
- 内容更多的是为了展现
- 内容不具备复杂的业务逻辑
比如播客,播客便具备以上特征,稍微调整下,我们完全可以把播客这种动态的内容静态化。
而这就是 Jamstack,一种将动态内容静态化的理念。
Jamstack 的组成
一个完善的 Jamstack 解决方案,必然包含以下两个部分:
- 内容管理
- 构建工具
内容管理
内容管理就是负责你内容的地方,你可以在这个地方随意的添加、修改或删除你的内容。
你可以使用 hexo、gitbook 这种本地文件系统的模式,可以使用 strapi、nocodb 这种 headless cms 的方式管理你的内容。
构建工具
构建工具应具备以下功能:
- 负责读取内容,并生成合适的页面
- 负责页面的展现(非必须,你可以使用 nginx、apache、CDN 等方式展现你的页面)
Jamstack 的优点及缺点
很明显,Jamstack 结合了动态与静态的优点:
- 一方面,它支持内容的动态管理,你可以使用内容管理服务来管理你的内容,这意味着你不需要直接为这些动态内容编写静态的 HTML。
- 在此之上,内容与UI做到了完美的分离,在内容不变的情况下,你可以随时修改你的样式或 UI,甚至可以支持不同的载体,比如网页,小程序,App 等。
- 另一方面,它最终生成的是静态页面,意味着静态网页所具有的高性能,易于缓存,对搜索友善等特点它都具备。
当然,这不是说 Jamstack 是万能的。
Jamstack的局限性:
- 其一是它仅仅适合一部分以展现为主的动态内容。比如博客,文档,视频,产品展现等,它并不适合业务逻辑很强的动态内容,比如库存管理,雇员管理或订单管理这些。
- 其二是它的更新比较频繁,每次动态内容的变更都需要重新生成网页。