最近Tom MacWright写了几篇关于单页应用(SPA)及其问题的文章:
Web开发的新兴标准是构建一个带有服务端渲染的React单页应用。这种架构的两个关键要素大致是:
- 主要UI使用React或类似技术通过JavaScript构建和更新。
- 后端是一个供应用程序发起请求的API。
这个理念确实席卷了整个互联网。它从几个主要流行网站开始,逐渐渗透到营销网站和博客等各个角落。
在这两篇文章中,Tom阐述了React/SPA无处不在的思维模式所带来的问题。如果要用一句话总结:SPA框架往往很复杂,但在许多情况下你并没有从这些复杂性中获得太多好处。
Tom在第二篇文章中概述了几种替代SPA的方法,我很高兴地说,他提到了htmx。然而,他将htmx(以及Stimulus和Alpine.js)归类为"渐进增强"库。这是个不错的描述,但至少在htmx的案例中,我认为有一个更好的术语来描述这类库:以HTML为中心(或者可能是以超文本为中心)。
在以HTML为中心的开发中,HTML不再是事后才考虑的东西,而是被作为应用程序开发的主要媒介。这与大多数SPA框架形成鲜明对比,在SPA框架中,客户端模型及操作它的JavaScript是核心焦点。
以HTML为中心的开发建立在Web原始模型的基础上,正如Roy Fielding博士论文中描述的Web架构。特别是通过拥抱HTML作为超文本,你可以获得REST和HATEOAS的好处,而无需成为这些主题的专家。
(请记住,Roy是在描述Web架构,因此原始的Web在很大程度上是符合REST的,而原始参与者并没有特别努力去实现这一点)
通过选择以HTML为中心的开发,你可以获得许多好处:
考虑到以HTML为中心模型的所有这些好处,人们可能会好奇为什么它被许多Web开发者抛弃(并且经常被嘲笑)。从高层次来看,答案是:
与基于JavaScript的应用程序相比,以HTML为中心的应用程序在历史上提供的交互性有限。
这在很大程度上是因为HTML是一种有限制的超文本。具体来说:
<a>
和<form>
可以发出HTTP请求click
和submit
事件可以触发它们当然,这些限制都不是超文本概念固有的,而htmx的目标就是消除这些限制。
通过消除这些限制并将HTML打造成功能齐全且强大的超文本,以HTML为中心的应用程序可以在许多应用领域与SPA竞争,同时还能获得上述的技术和复杂性优势。
Tom在他的第一篇文章中这样结尾:
如果所有人都错了怎么办?我们以前也犯过错。
Web开发曾多次走入死胡同:GWT、Java Server Faces、Angular 1、FlatUI等等。在这些技术炒作周期的高峰期,逆流而行是很困难的。在技术界尤其如此,在技术上落后不仅威胁到我们的自尊心,还威胁到我们的工作。
"没有人因为使用React而被解雇"
就是今天的
"没有人因为购买IBM而被解雇"
即使我们认为React等框架对当今构建的许多(甚至大多数)Web应用程序并不合适,这也是我们必须接受的现实。
然而,我们开始看到对SPA方法的重新思考。带着一点技术勇气和敢于逆流而上的意愿,你或许能让应用程序变得不那么复杂,并将开发精力集中在应用程序的功能上,而不是实现方式上。
来自htmx开发者入门套件: