网易首页 > 网易号 > 正文 申请入驻

Htmx意外走红,我们从React“退回去”后:代码行数减少 67%,JS 依赖项从 255 下降到 9

0
分享至

编译 | 核子可乐、Tina

技术和软件开发领域存在一种有趣的现象,就是同样的模式迭起兴衰、周而复始。

htmx 的走红

过去Web非常简单。URL 指向服务器,服务器将数据混合成 html,然后在浏览器上呈现该响应。围绕这种简单范式,诞生了各种Javascript框架,以前可能需要数月时间完成的一个应用程序基本功能,现在借助这些框架创建相对复杂的项目却只需要数小时,我们节省了很多时间,从而可以将更多精力花在业务逻辑和应用程序设计上。

但随着 Web 不断地发展,Javascript 失控了。不知何故,我们决定向用户抛出大量 App,并在使用时发出不断增加的网络请求;不知何故,为了生成 html,我们必须使用 JSON,发出数十个网络请求,丢弃我们在这些请求中获得的大部分数据,用一个越来越不透明的 JavaScript 框架黑匣子将 JSON 转换为 html,然后将新的 html 修补到 DOM 中......

难道大家快忘记了我们可以在服务器上渲染 html 吗?更快、更一致、更接近应用程序的实际状态,并且不会向用户设备发送任何不必要的数据?但是如果没有 Javascript,我们必须在每次操作时重新加载页面。

现在,有一个新的库出现了,摒弃了定制化的方法,这就是 htmx。作为 Web 开发未来理念的一种实现,它的原理很简单:

  • 从任何用户事件发出 AJAX 请求。

  • 让服务器生成代表该请求的新应用程序状态的 html。

  • 在响应中发送该 html。

  • 将该元素推到它应该去的 DOM 中。

htmx 出现在 2020 年,创建者 Carson Gross 说 htmx 来源自他于 2013 年研究的一个项目 intercooler.js。2020 年,他重写了不依赖 jQuery 的 intercooler.js,并将其重命名为 htmx。然后他惊讶的发现 Django 社区迅速并戏剧性地接受了它!

图片来源:https://lp.jetbrains.com/django-developer-survey-2021-486/

Carson Gross 认为 htmx 设法抓住了开发者对现有 Javascript 框架不满的浪潮,“这些框架非常复杂,并且经常将 Django 变成一个愚蠢的 JSON 生产者”,而 htmx 与开箱即用的 Django 配合得更好,因为它通过 html 与服务器交互,而 Django 非常擅长生成 html。

对于 htmx 的迅速走红,Carson Gross 发出了一声感叹:这真是“十年窗下无人问,一举成名天下知(this is another example of a decade-long overnight success)”。

htmx 的实际效果

可以肯定的一点是 htmx 绝对能用,单从理论上讲,这个方法确实值得称道。但软件问题终究要归结于实践效果:效果好吗,能不能给前端开发带来改善?

在 DjangoCon 2022 上,Contexte 的 David Guillot 演示了他们在真实 SaaS 产品上实现了从 React 到 htmx 的迁移,而且效果非常好,堪称“一切 htmx 演示之母”(视频地址:https://www.youtube.com/watch?v=3GObi93tjZI)。

Contexte 的项目开始于 2017 年,其后端相当复杂,前端 UI 也非常丰富,但团队非常小。所以他们在一开始的时候跟随潮流选择了 React 来“构建 API 绑定 SPA、实现客户端状态管理、前后端状态分离”等。但实际应用中,因为 API 设计不当,DOM 树太深,又需要加载很多信息,导致 UI“非常非常缓慢”。在敏捷开发的要求下,团队里唯一的 Javascript 专家对项目的复杂性表现得一无所措,因此他们决定试试 htmx。

九大数据提升

于是我们决定大胆尝试,花几个月时间用简单的 Django 模板和 htmx 替换掉了 SaaS 产品中已经使用两年的 React UI。这里我们分享了一些相关经验,公布各项具体指标,希望能帮同样关注 htmx 的朋友们找到说服 CTO 的理由!
  1. 这项工作共耗费了约 2 个月时间(使用 21K 行代码库,主要是 JavaScript)

  2. 不会降低应用程序的用户体验(UX)

  3. 将代码库体积减小了 67%(由 21500 行削减至 7200 行)

  4. 将 Python 代码量增加了 140%(由 500 行增加至 1200 行);这对更喜欢 Python 的开发者们应该是好事

  5. 将 JS 总体依赖项减少了 96%(由 255 个减少至 9 个)

6. 将 Web 构建时间缩短了 88%(由 40 秒缩短至 5 秒)

7. 首次加载交互时间缩短了 50% 至 60%(由 2 到 6 秒,缩短至 1 到 2 秒)

8. 使用 htmx 时可以配合更大的数据集,超越 React 的处理极限

9. Web 应用程序的内存使用量减少了 46%(由 75 MB 降低至 40 MB)

这些数字令人颇为意外,也反映出 Contexte 应用程序高度契合超媒体的这一客观结果:这是一款以内容为中心的应用程序,用于显示大量文本和图像。很明显,其他 Web 应用程序在迁移之后恐怕很难有同样夸张的提升幅度。

但一些开发者仍然相信,大部分应用程序在采用超媒体 /htmx 方法之后,肯定也迎来显著的改善,至少在部分系统中大受裨益。

开发团队组成

可能很多朋友没有注意,移植本身对团队结构也有直接影响。在 Contexte 使用 React 的时候,后端与前端之间存在硬性割裂,其中两位开发者全职管理后端,一位开发者单纯管理前端,另有一名开发者负责“全栈”。(这里的「全栈」,代表这位开发者能够轻松接手前端和后端工作,因此能够在整个「栈」上独立开发功能。)

而在移植至 htmx 之后,整个团队全都成了“全栈”开发人员。于是每位团队成员都更高效,能够贡献出更多价值。这也让开发变得更有乐趣,因为开发人员自己就能掌握完整功能。最后,转向 htmx 也让软件优化度上了一个台阶,现在开发人员可以在栈内的任意位置进行优化,无需与其他开发者提前协调。

htmx 是传统思路的回归

如今,单页应用(SPA)可谓风靡一时:配合 React、Redux 或 Angular 等库的 JS 或 TS 密集型前端,已经成为创建 Web 应用程序的主流方式。以一个需要转译成 JS 的 SPA 应用为例:

但 htmx 风潮已经袭来,人们开始强调一种“傻瓜客户端”方法,即由服务器生成 html 本体并发送至客户端,意味着 UI 事件会被发送至服务器进行处理。

用这个例子进行前后对比,我们就会看到前者涉及的活动部件更多。从客户端角度出发,后者其实回避了定制化客户端技术,采取更简单的方法将原本只作为数据引擎的服务器变成了视图引擎。

后一种方法被称为 AJAX(异步 JavaScript 与 XML)。这种简单思路能够让 Web 应用程序获得更高的响应性体验,同时消除了糟糕的“回发”(postback,即网页完全刷新),由此回避了极其低效的“viewstate”等.NET 技术。

htmx 在很多方面都体现出对 AJAX 思路的回归,最大的区别就是它仅仅作为新的声明性 html 属性出现,负责指示触发条件是什么、要发布到哪个端点等。

另一个得到简化的元素是物理应用程序的结构与构建管道。因为不再涉及手工编写 JS,而且整个应用程序都基于服务器,因此不再对 JS 压缩器、捆绑器和转译器做(即时)要求。就连客户端项目也能解放出来,一切都由 Web 服务器项目负责完成,所有应用程序代码都在.NET 之上运行。从这个角度来看,这与高度依赖服务器的 Blazor Server 编程模型倒是颇有异曲同工之妙。

技术和软件开发领域存在一种有趣的现象,就是同样的模式迭起兴衰、周而复始。随着 SPA 的兴起,人们一度以为 AJAX 已经过气了,但其基本思路如今正卷土重来。这其中当然会有不同的权衡,例如更高的服务器负载和网络流量(毕竟现在我们发送的是数据视图,而不只是数据),但能让开发者多个选择肯定不是坏事。

虽然不敢确定这种趋势是否适用于包含丰富用户体验的高复杂度应用程序,但毫无疑问,相当一部分 Web 应用程序并不需要完整的 SPA 结构。对于这类用例,简单的 htmx 应用程序可能就是最好的解决方案。

https://news.ycombinator.com/item?id=33218439

https://www.reddit.com/r/django/comments/rxjlc6/htmx_gaining_popularity_rapidly/

https://mekhami.github.io/2021/03/26/htmx-the-future-of-web/

https://www.compositional-it.com/news-blog/more-on-htmx-back-to-the-future/

声明:本文为InfoQ编译,未经许可禁止转载。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

/阅读下一篇/

Pinterest使用Honeycomb增强CI可观测性和构建稳定性

返回网易首页 下载网易新闻客户端
相关推荐
热点推荐
十天之内,中国把美国最后的科技优势捅了两刀。接下来也许更精彩

十天之内,中国把美国最后的科技优势捅了两刀。接下来也许更精彩

沧海一书客
2025-01-09 20:53:50
有研究称连花清瘟可防治甲流,效果优于奥司他韦,引网友群嘲

有研究称连花清瘟可防治甲流,效果优于奥司他韦,引网友群嘲

小萝卜丝
2025-01-09 21:01:17
悲催!网友称连猎头都被优化了,正在经历失业,才知找工作有多难

悲催!网友称连猎头都被优化了,正在经历失业,才知找工作有多难

火山诗话
2025-01-10 20:08:48
1979年邓小平访美,遭遇三次行刺,步步惊心,袭击者身份各异

1979年邓小平访美,遭遇三次行刺,步步惊心,袭击者身份各异

阿胡
2024-02-19 11:03:55
为中国家庭用户而来!比亚迪夏正式上市 售24.98-30.98万元

为中国家庭用户而来!比亚迪夏正式上市 售24.98-30.98万元

郝健说电车
2025-01-11 11:07:50
纳指跌超2%!英伟达市值蒸发超1万亿元,国际原油价格涨超3%!发生了什么?

纳指跌超2%!英伟达市值蒸发超1万亿元,国际原油价格涨超3%!发生了什么?

每日经济新闻
2025-01-11 00:02:08
丹麦智库:如果特朗普“入侵格陵兰”,这将是世界最短的战争

丹麦智库:如果特朗普“入侵格陵兰”,这将是世界最短的战争

晨枫老苑
2025-01-11 11:11:26
全国人民都关心的食品安全,不仅没治理,反而更疯狂!谁之责?

全国人民都关心的食品安全,不仅没治理,反而更疯狂!谁之责?

笑熬浆糊111
2025-01-09 00:06:18
马诺终究在宝马里哭了

马诺终究在宝马里哭了

阿亮评论
2025-01-11 11:15:45
你的存款,有没有在农村信用社,以及邮政银行存定期呢?

你的存款,有没有在农村信用社,以及邮政银行存定期呢?

农村阿祖
2025-01-10 08:46:24
总冠军预演!33分惨败山西清醒了,潘江因祸得福:曝广厦致命弱点

总冠军预演!33分惨败山西清醒了,潘江因祸得福:曝广厦致命弱点

话体坛
2025-01-10 22:36:51
2024年“人设崩塌”的7位艺人,花式翻车,没有一个值得原谅

2024年“人设崩塌”的7位艺人,花式翻车,没有一个值得原谅

美食阿鳕
2025-01-10 20:00:29
你无意间摸到过什么不该摸的?看完网友分享,有些真会留下阴影!

你无意间摸到过什么不该摸的?看完网友分享,有些真会留下阴影!

滑稽斑马呀
2024-07-31 17:48:33
超10万人撤离!美国加州火势完全失控,当地华人:超市水被抢空

超10万人撤离!美国加州火势完全失控,当地华人:超市水被抢空

娱乐圈见解说
2025-01-10 08:39:49
案件:北京一女教授在家养病长达10年,民警进门后,当场愣在原地

案件:北京一女教授在家养病长达10年,民警进门后,当场愣在原地

五元讲堂
2024-12-24 16:57:49
被马斯克奖励4个亿!这位东北小伙,凭实力成为特斯拉“太子爷”

被马斯克奖励4个亿!这位东北小伙,凭实力成为特斯拉“太子爷”

校长侃财
2025-01-10 09:32:37
“王星事件”起了蝴蝶效应,大学生,模特,灯光师,退伍军人求救

“王星事件”起了蝴蝶效应,大学生,模特,灯光师,退伍军人求救

阿凫爱吐槽
2025-01-10 11:07:46
郑钦文谈为灾区捐款:我站在这个位置上,肯定是要为社会做些什么的

郑钦文谈为灾区捐款:我站在这个位置上,肯定是要为社会做些什么的

懂球帝
2025-01-10 13:08:09
陈皮“最散结”的吃法,脾气大、肝气不顺的人,吃1次就见效!

陈皮“最散结”的吃法,脾气大、肝气不顺的人,吃1次就见效!

荷兰豆爱健康
2025-01-10 12:25:04
外线挺准!普尔13中7得到22分2板2助 三分9中6

外线挺准!普尔13中7得到22分2板2助 三分9中6

直播吧
2025-01-11 11:24:11
2025-01-11 11:52:49
InfoQ incentive-icons
InfoQ
有内容的技术社区媒体
10630文章数 51023关注度
往期回顾 全部

科技要闻

华为、广汽,新进展!

头条要闻

30岁上海男子"极限通勤":每天往返80公里 已坚持7年

体育要闻

西部第3的最强引援 是个42岁"小说男主"?

娱乐要闻

更多知情者下场!已婚网友称张颂文诱骗骚扰?

财经要闻

全球大跳水!发生了什么?

汽车要闻

10万元级无图智驾 悦也PLUS全路况实测

态度原创

亲子
数码
本地
健康
公开课

亲子要闻

小孩子怎么会有这么多面性

数码要闻

CES现场直击!看aigo如何成为Z世代科技新宠

本地新闻

食味印象|来太原,先干了这碗牺汤!

抑郁症患者称好的“乌托邦”宝地

公开课

李玫瑾:为什么性格比能力更重要?