回归超媒体系统:用 HTML 替代 JavaScript

现代 Web 开发格局长期被复杂的客户端框架所主导,这些框架将浏览器视为应用运行时而非文档查看器。然而,越来越多的倡议呼吁回归 Web 最初的目标:超媒体系统。通过优先使用 HTML 而非 JavaScript,开发者可以降低复杂度、提升初始加载速度,并与使 Web 数十年来保持可扩展性的架构模式保持一致。

HTML 优先开发的理由

从本质上讲,Web 是一个超媒体系统。当我们摆脱沉重的 JavaScript 包,回归服务器端渲染(SSR)和原生 HTML 过渡时,我们重新发现了那种“飞快”性能和简洁性,这些往往在现代单页应用(SPA)的喧嚣中被忽视。

使用后端——例如社区成员提到的 Go——来提供预渲染的 HTML,使浏览器能够发挥其最擅长的功能:解析和渲染文档。这种方式消除了客户端与服务器之间复杂状态同步的需求,因为服务器仍然是唯一的真相来源。

在简洁性与性能之间的平衡

虽然向 HTML 优先开发的转变颇具吸引力,但并非没有权衡。主要的矛盾在于服务器驱动方法的简洁性与客户端交互式体验的优化之间的冲突。

网络往返问题

HTML 优先方法的主要批评之一是对网络请求的依赖增加。在传统的 SPA 中,一小段 JavaScript 可以更新本地状态变量,从而改变 UI 元素的大小或可见性,而无需请求服务器。而在严格的 HTML 驱动模型中,改变视图状态可能需要完整的页面重新加载或从服务器获取片段更新。

"有了这个变化,我现在需要再进行一次网络往返请求,以获取当前页面上相同内容的新尺寸,而这本可以仅用几百字节的 JavaScript 完成。"

替代的折中方案

为缓解这些问题,浏览器平台正在演进。开发者正在探索混合方法,在保持 HTML 简洁性的同时提供 JS 驱动应用的流畅性。这些包括:

  • CSS Variables: 仅使用 JavaScript 切换控制布局或尺寸的 CSS 变量,避免完整的服务器往返,同时保持关注点的清晰分离。
  • Web Components: 利用原生浏览器组件封装行为,无需沉重的框架。
  • View Transitions API: 使用 CSS 过渡和 View Transitions API 有助于弥合差距,使服务器端导航的体验如同客户端过渡般流畅,尽管浏览器支持(尤其是 Firefox)仍是限制因素。

超媒体系统的未来

Web 平台正演进为更强大的超媒体系统。除了简单的 HTML,针对通用嵌入(transclusion)以及其他架构改进的提案正在制定,以使 Web 能够更具表现力,而无需依赖“JavaScript 万能”的范式。

归根结底,目标并非彻底消除 JavaScript,而是为不同任务选取合适的工具。将 HTML 视为应用状态的主要驱动,并将 JavaScript 用作渐进增强,开发者可以构建更易访问、更具韧性且显著更易维护的应用。

Sources