超媒体随你所好

Carson Gross

多页应用(MPA)剩下的一个主要优势是(服务器端编程)语言选择。如果你已经是反JavaScript抵抗运动的一员,那么我本次演讲的其余内容对你来说都不太重要。

但是,我稍后会谈到:那艘船可能已经起航了...

Rich Harris - SPA是否毁了Web?

我们喜欢谈论的一个概念是“HOWL技术栈”。HOWL代表超媒体随你所好(Hypermedia On Whatever you’d Like)

这是一个开玩笑但不完全是玩笑的软件技术栈,参考了更知名的技术栈如LAMP栈MEAN栈

HOWL技术栈的要点是:当你为Web应用使用超媒体驱动方法时,你可以自由选择任何最适合你问题和个人技术喜好的服务器端技术。

感受JavaScript压力

如果你决定为Web应用使用SPA框架,自然会有大量用JavaScript编写的前端代码库。

考虑到这一点,不可避免地会出现以下问题:

“那么,为什么我们不在后端也用JavaScript呢?”

这是个合理的问题,在两端采用相同的编程语言有很多优势:

随着对JavaScript前端生态系统的投入增加,这种采用JavaScript的压力只会增长。

此外,JavaScript在过去五年中有了巨大改进,现在有多个优秀的服务器端运行时来执行它。许多关于语言混乱的旧论点可以通过linting、开发者纪律等预防措施来反驳。

JavaScript是Web开发思想领袖中的主导语言,有大量教程、代码营等强烈强调该语言。成功孕育成功,JavaScript(以及React)已经取得了成功。

让我们称此为JavaScript压力,并承认几乎所有与Web合作的开发者都至少在一定程度上感受到了它。

超媒体:我们唯一的希望

非JavaScript开发者在Web开发中有什么希望?

嗯,浏览器中有一个与JavaScript并存的老技术:超媒体

浏览器提供出色的HTML支持(以及相关的文档对象模型,即DOM)。事实上,即使你使用SPA框架,你也将通过某种形式(例如JSX模板)使用该超媒体基础设施来创建浏览器可以理解的UI。

所以你将在Web应用中以某种方式使用HTML或相关的DOM API。

那么,如果我们让HTML成为更强大的超媒体会怎样?

这就是htmx的理念,它使得使用超媒体方法实现常见现代Web应用模式成为可能。这缩小了传统MPA和SPA之间的用户体验差距,使得超媒体路线对于更广泛的Web应用可行。

一旦你采用这种超媒体方法(记住,无论如何你都将使用超媒体基础设施,那么为什么不尽可能利用它?),一个意想不到的副作用发生了:

突然之间,Harris归因于MPA的服务器端语言选择优势重新生效

如果你的应用前端主要用HTML编写,可能带有一点客户端脚本,且没有大型JavaScript代码库,你突然大幅减少(或完全消除)了后端的JavaScript压力。

你现在可以根据其他考虑(技术、美学或其他)来选择服务器端语言(和框架):

这些都是完全合理的技术、哲学和美学观点。

通过采用超媒体作为主要前端技术,你可以在没有双重代码库的情况下追求这些目标中的任何一个。超媒体不关心你用什么来生成它:你可以在任何你喜欢的平台上使用超媒体。

面向所有人的开放Web

当我们说"任何",我们是认真的。

这是htmx discord的HOWL子版块最近的截图。请注意这些只是碰巧有活跃流量的频道,还有更多。

你可以看到我们有多种不同编程语言和框架的持续对话:Java、Go、.NET、Rust、Clojure、PHP、Ruby、Python、Ocaml。甚至有些人谈论在Bash和Cobol中使用htmx!

这正是我们想看到的未来:一个丰富而充满活力的Web,其中每个后端语言和框架都可以作为平等且有趣的替代方案参与。每种语言和框架都有其独特的优势和文化,每种都可以为神奇的超媒体系统(即Web)做出贡献。

但这是否是JavaScript抵抗?

在结束本文之前,我们想解决对JavaScript无处不在的抵抗是否必然是JavaScript的问题。

诚然,我们嘲笑过关于JavaScript的笑话,甚至为Web创建了替代脚本语言hyperscript

因此看起来我们应该是持有证件的反JavaScript分子。

但相反,我们深深感激JavaScript。

毕竟,htmx和hyperscript都是用JavaScript构建的。没有JavaScript,我们无法创建这些库,无论别人怎么说,它都具有存在于此的巨大优点。

我们甚至推荐使用JavaScript来满足超媒体驱动应用中的前端脚本需求,只要你以超媒体友好的方式编写脚本。

此外,如果该语言是你团队的最佳选择,我们不会阻止他们在超媒体驱动应用的服务器端使用JavaScript(或TypeScript)。如前所述,JavaScript现在有多个优秀的服务器端运行时和许多优秀的服务器端库可用。

它可能是你和团队的最佳选择,在这种情况下没有理由不使用它。

超媒体随你所好意味着:随你所好。

但JavaScript不应该是,也不应该是你团队唯一的服务器端选项。

扭转航向

随着对超媒体的兴趣复苏(和改进),一个开放和多样化的Web未来现在成为真正的可能性,如果不是正在显现的现实。

Web被设计成一个开放、多语言和参与性的超媒体系统。

至少现在,那艘船尚未起航

我们可以通过重新学习和重新拥抱Web的基础技术:超媒体,来保持这个梦想的活力。

我讨厌htmx社区已退化为建设者互相帮助而不在乎点赞,吸引那些不追随炒作的人,将简短发言扩展为细微差别。这可能不会在社交媒体上获得廉价积分,但这是健康的。Web曾经比这更糟。

@teej_dv

</>