SPA替代方案

Carson Gross

最近Tom MacWright写了几篇关于单页应用(SPA)及其问题的文章:

Web开发的新兴标准是构建一个带有服务端渲染的React单页应用。这种架构的两个关键要素大致是:

  1. 主要UI使用React或类似技术通过JavaScript构建和更新。
  2. 后端是一个供应用程序发起请求的API。

这个理念确实席卷了整个互联网。它从几个主要流行网站开始,逐渐渗透到营销网站和博客等各个角落。

在这两篇文章中,Tom阐述了React/SPA无处不在的思维模式所带来的问题。如果要用一句话总结:SPA框架往往很复杂,但在许多情况下你并没有从这些复杂性中获得太多好处。

一种替代方案

Tom在第二篇文章中概述了几种替代SPA的方法,我很高兴地说,他提到了htmx。然而,他将htmx(以及StimulusAlpine.js)归类为"渐进增强"库。这是个不错的描述,但至少在htmx的案例中,我认为有一个更好的术语来描述这类库:以HTML为中心(或者可能是以超文本为中心)。

以HTML为中心的开发

在以HTML为中心的开发中,HTML不再是事后才考虑的东西,而是被作为应用程序开发的主要媒介。这与大多数SPA框架形成鲜明对比,在SPA框架中,客户端模型及操作它的JavaScript是核心焦点。

以HTML为中心的开发建立在Web原始模型的基础上,正如Roy Fielding博士论文中描述的Web架构。特别是通过拥抱HTML作为超文本,你可以获得REST和HATEOAS的好处,而无需成为这些主题的专家。

(请记住,Roy是在描述Web架构,因此原始的Web在很大程度上是符合REST的,而原始参与者并没有特别努力去实现这一点)

通过选择以HTML为中心的开发,你可以获得许多好处:

HTML的缺点

考虑到以HTML为中心模型的所有这些好处,人们可能会好奇为什么它被许多Web开发者抛弃(并且经常被嘲笑)。从高层次来看,答案是:

与基于JavaScript的应用程序相比,以HTML为中心的应用程序在历史上提供的交互性有限。

这在很大程度上是因为HTML是一种有限制的超文本。具体来说:

当然,这些限制都不是超文本概念固有的,而htmx的目标就是消除这些限制。

通过消除这些限制并将HTML打造成功能齐全且强大的超文本,以HTML为中心的应用程序可以在许多应用领域与SPA竞争,同时还能获得上述的技术和复杂性优势。

技术上的勇气

Tom在他的第一篇文章中这样结尾:

如果所有人都错了怎么办?我们以前也犯过错。

Web开发曾多次走入死胡同:GWT、Java Server Faces、Angular 1、FlatUI等等。在这些技术炒作周期的高峰期,逆流而行是很困难的。在技术界尤其如此,在技术上落后不仅威胁到我们的自尊心,还威胁到我们的工作。

"没有人因为使用React而被解雇"

就是今天的

"没有人因为购买IBM而被解雇"

即使我们认为React等框架对当今构建的许多(甚至大多数)Web应用程序并不合适,这也是我们必须接受的现实。

然而,我们开始看到对SPA方法的重新思考。带着一点技术勇气和敢于逆流而上的意愿,你或许能让应用程序变得不那么复杂,并将开发精力集中在应用程序的功能上,而不是实现方式上。

来自htmx开发者入门套件

如果?

</>