2021年的Jamstack是什么?

2020-12-29 14:31:59

2020年对于很多事情来说都是糟糕的一年,但是对于Jamstack来说是相当不错的一年。我们不仅看到Jamstack领域的许多创业公司获得了巨额资金,而且大公司也纷纷加入。例如,Microsoft启动了Azure静态Web应用程序,最近,Cloudflare启动了Cloudflare页面。正如我在最近一期的《 Jamstacked》中所指出的那样,我认为我们可以回顾一下今年《 Jamstack》成为主流的那一年。

附带说明一下,如果您对Jamstack感兴趣,请确保与我一起参加1月28日至29日举行的Jamstack社区会议TheJam.dev。

这也是Jamstack概念不断发展的一年。最初是静态网站的工具,后来在2016年创造了Jamstack这个术语时,重新定义为包含通过JavaScript和API的动态客户端功能。在2020年,我们看到了该定义发生变化的最初迹象,因为它最初是由结合使用SSR(服务器端渲染)和静态预渲染的混合站点引起的。 Next.js大大普及了这种混合选项。

但是这些网站真的是Jamstack吗?我认为,一方面,我们在实践中如何定义和重新定义Jamstack术语根本不重要,而另一方面,它实际上非常重要。

基于JavaScript的Jamstack工具(例如Next.js,RedwoodJS和Nuxt)使开发人员可以定义如何在站点内生成路线。例如,我的博客页面可能全部都是静态的,而我的主页则可以在服务器端呈现。最初只能通过在Vercel上托管或基于节点的托管服务来获得此功能,但是Netlify也已开始通过Netlify上的Next之类的工具来支持这些混合SSR / SSG站点。

关于这些站点是否是Jamstack,社区内部进行了激烈的辩论。就像关于术语Jamstack的每一次辩论一样,Netlify在很大程度上创建并维护了该术语,这使问题显得尤为突出。随着Jamstack越来越流行,尤其是随着公司跳入生态系统,这一点变得更加明显。例如,尽管我不愿进行任何内部讨论,但我很大程度上怀疑这就是为什么Microsoft使用短语“静态Web应用”而不是Jamstack的原因-因为将Jamstack的推广与推广Netlify很难分离。这一点不比Vercel最近的融资公告更明显,该公司宣布从最初的Jamstack发起人转变为抨击Jamstack的概念,即“纯静态的教条主义”。

因此,争论的焦点从SSR / SSG混合站点是否为Jamstack到它们是否代表了您可以称之为后Jamstack的概念。

您可能想知道为什么有人在乎这样神秘的辩论,您会说出一点意思。对于大多数开发人员而言,现实是,这些定义在日常工作中毫无意义。严格遵守Jamstack的概念并不会给我们带来报酬,但可以完成工作。如果通过完全SSR,部分SSR或完全静态的方式最好地满足站点的要求,那么我们应该这样做。我们可能会偏爱一种可以指导我们的解决方案,但是它并不能(也不能)限制我们最终解决问题的方式。

这导致许多开发人员经常将其视为关于营销的辩论。他们说,毕竟,Jamstack只是Netlify创造的一种营销术语,目的是普及一组工具(静态网站生成器),而这并非巧合,而是您构建网站以在Netlify上运行的方式。

让我们回到2016年,当时创建了Jamstack一词。到那时,已经成为静态站点生成器的积极拥护者,对于我和其他人来说,显然存在一个真正的感知问题。所谓的“静态站点”,纯粹被视为主要针对开发人员博客和开发人员投资组合的利基解决方案(也许在较小程度上适用于文档)。没有人会使用静态站点生成器来构建一个严肃的站点,对吗?

通过定义一个新术语,即放弃了对“静态”的有问题的使用,Jamstack帮助改变了对这些工具的看法-但它所做的还不止于此。它帮助定义了一个我们可以围绕其进行组织的概念-编写Jamstack书籍,主持Jamstack会议,运行Jamstack聚会等。这样做不仅需要一个术语,而且对社区具有可理解的意义和价值。 Jamstack的定义足够清晰,足以实现这一目标,我认为,这有助于将这些工具的使用从2016年的边缘解决方案推广到2021年的主流解决方案。

我们该如何定义Jamstack前进的方向呢?

我对Vercel对Jamstack概念的“攻击”提出的一大批评是,它没有提供任何明确定义的替代方案。我们“不关心应用程序是CSR,SSR,SSG等,只要[我们的]最终用户感到满意”,正是我在上面“标签无意义”部分中分享的观点,但并非我们可以围绕组织或传播福音的原则或概念。它只说不是,不是。

这给我们带来了如何定义Jamstack的问题。我相信可以说,Jamstack的概念可以演变为包括混合站点,尽管有些人会不同意。但是,如果由于我上面定义的所有原因继续具有价值,则该术语必须保留明确的定义和易于理解的含义。说一个站点就是Jamstack,因为它使用的是静态站点生成器,即使它是在Next上运行的完全SSR站点也使定义太模糊了。那和一个带有SSR的普通旧React站点(没有Next)之间有什么区别?或实际上是哪个网站,因为,当今网络上几乎所有内容都是JavaScript,API和标记(毕竟HTML是标记)?对我而言,走这条路线最终使我们处于一个或多或少地只是倡导现代Web开发而没有真正的组织原则或体系结构的位置。

我个人的定义中有混合解决方案的空间,但它首先是静态的,这意味着每条路由都假定为静态,除非该路由的特定要求阻止了使用静态解决方案的可能性。因此,这是一个在必要时撒以静态生成资产的站点,而不是撒满静态路由的SSR站点。这并不是说替代方案有什么问题,只是它不是Jamstack-很好,请为您解决问题。我个人认为,即使不是多数,Web站点也可以在Jamstack的静态优先混合模型中工作。我还认为添加一些撒满的SSR并不会过度稀释该术语的价值。

因此,在2021年,我们首先删除JAM首字母缩略词(我认为,它带来的混乱比如今有所助益)。只是Jamstack而不是JAMstack。它是一种体系结构或方法论,而不是特定工具的“堆栈”-是的,名称的堆栈部分有点令人困惑,但这是我们的名字。让我们将Jamstack定义为“静态优先”而非“仅静态”,从而为混合解决方案腾出空间。最后,作为开发人员,无论您是否完全适合Jamstack,都要做您需要做的事情-但要尽可能从项目中了解和应用Jamstack原理。