当前位置:首页 > 科技  > 软件

Htmx 只是另一个 JavaScript 框架吗?

来源: 责编: 时间:2024-01-15 09:20:45 328观看
导读对 htmx 最常见的批评之一通常来自第一次听说它的人,如下所示:你抱怨现代前端框架的复杂性,但你的解决方案只是另一个复杂的前端框架。这是一个很好的反对意见!对于你引入到项目中的任何第三方 (3P) 代码,你都有权提出疑问

对 htmx 最常见的批评之一通常来自第一次听说它的人,如下所示:jOR28资讯网——每日最新资讯28at.com

你抱怨现代前端框架的复杂性,但你的解决方案只是另一个复杂的前端框架。jOR28资讯网——每日最新资讯28at.com

这是一个很好的反对意见!对于你引入到项目中的任何第三方 (3P) 代码,你都有权提出疑问。即使你没有亲自编写 3P 代码,但只要将其纳入项目,你就必须了解它--如果你想升级它,就必须重新了解它。jOR28资讯网——每日最新资讯28at.com

让我们将这些批评分解成其组成部分,并确定htmx在其声称要解决的伤害中到底有多少沉迷其中。jOR28资讯网——每日最新资讯28at.com

库和框架的区别

一些 htmx 捍卫者向我们求助:“htmx 不是一个框架,它是一个库。”这可能是不正确的。jOR28资讯网——每日最新资讯28at.com

“框架”是一个口语术语——对于某些第三方代码从“库”演变为“框架”的程度没有硬性规定——但我们仍然应该尝试定义它。在这种情况下:jOR28资讯网——每日最新资讯28at.com

  • 库 - 3P 代码,其 API 不会显着影响应用程序的其余部分
  • 框架 - 3P 代码,其 API 决定应用程序的整体结构

如果你更喜欢比喻:库是你添加到机器上的一个齿轮,框架是一个预先构建的机器,你可以通过自定义其齿轮来控制它。jOR28资讯网——每日最新资讯28at.com

这种区别虽然可能很模糊,但很重要,因为它描述了替换某些第三方代码的容易程度。例如,使用 CSV 解析库的 JavaScript 服务可能可以轻松地交换不同的 CSV 解析库;然而,使用 NextJS 框架的 JavaScript 服务可能在其整个使用寿命中都依赖于 NextJS,因为大量代码是在假设它与 NextJS 结构交互的情况下编写的。jOR28资讯网——每日最新资讯28at.com

因此,如果你的服务是在框架之上构建的,则其使用寿命与该框架的使用寿命相关。如果该框架被放弃,或被鄙视,或以其他方式不受欢迎,那么修改项目的难度将稳步增加,直到你放弃修改它,并最终将其完全封存。jOR28资讯网——每日最新资讯28at.com

这就是人们在问“htmx 只是另一个 JavaScript 框架吗?”时所担心的问题。他们希望确保自己不会致力于一个很快就会过时的系统,就像过去的许多 Web 开发框架一样。jOR28资讯网——每日最新资讯28at.com

那么:htmx是一个框架吗?它是否会很快被淘汰,在其迅速消亡后留下一系列无法维护的网站?jOR28资讯网——每日最新资讯28at.com

htmx(通常)是一个框架

对我们社区关于这个问题的持续争论表示歉意——我认为 htmx 显然是一个框架,至少在大多数用例中是这样。但这确实取决于你如何使用它。jOR28资讯网——每日最新资讯28at.com

无论你在项目中的何处使用 htmx,你都会在 HTML 中包含 htmx 属性(即 hx-post 、 hx-target ),编写使用 htmx 格式数据调用的端点(使用某些请求标头),并从这些端点返回以 htmx 期望的方式格式化的数据(带有 hx-* 控件的 HTML)。所有这些属性以及标头和端点相互交互以创建一个系统,元素通过该系统通过网络请求进入和退出 DOM。jOR28资讯网——每日最新资讯28at.com

如果你使用 htmx 来处理网站的大量网络请求,那么在应用程序中包含 htmx 会对项目的结构产生重大影响,从构建前端标记的方式到端点进行的数据库查询。这是类似框架的行为,在这种情况下,htmx 不能轻易被替换。jOR28资讯网——每日最新资讯28at.com

你绝对可以以类似库的方式使用 htmx,为网页的几个部分添加动态功能。但你也可以用这种类似于库的方式编写 React,没有人会说 React 不是一个框架。我只想说,许多在应用程序中使用 htmx 的人都是为了满足 htmx 的需求,将其作为构建超媒体应用程序的框架。jOR28资讯网——每日最新资讯28at.com

如果能发挥 htmx 的优势,那么使用 htmx 构建程序的效果会更好。如果你真的坚持,可以发送 JSON 格式的表单体。但你不应该这样做!application/x-www-form-urlencoded 格式的表单体并编写一个可接受它们的端点会更简单。如果你真的坚持,你可以编写一个在多个不同客户端之间重复使用的端点。但你不应该这样做!将数据和超媒体 API 分离到不同的 URL 中会更简单。是的,htmx 可以作为一个库使用,但或许也可以让它成为你的框架。jOR28资讯网——每日最新资讯28at.com

然而,这并不意味着 htmx 只是另一个 JavaScript 框架,因为 htmx 具有其他框架没有的巨大优势:HTML。jOR28资讯网——每日最新资讯28at.com

htmx 用于编写 HTML

假设你使用 htmx 作为框架 - 它是 JavaScript 框架吗?从一种明显的意义上来说,是的:htmx 是用大约 4k 行 JS 实现的。但从另一个更重要的意义上来说,它不是:React、Svelte、Solid 等等,你写的 JS(X) 框架会转换成 HTML;htmx 只是让你编写 HTML。这就免去了可能会让你放弃其他框架的各种维护工作。jOR28资讯网——每日最新资讯28at.com

当你想要升级或更改某些依赖项,但你使用的框架与该更改不兼容时,代码库往往会陷入困境。Java 是这里最臭名昭著的罪犯——生产中有数百万行 Java 永远不会离开 Java 8,因为升级 Spring 太难了——但 npm 包生态系统紧随其后。当你使用 htmx“框架”时,你永远不会遇到这个问题,因为 htmx 是一个零依赖、客户端加载的 JavaScript 文件,因此保证它永远不会与你的服务器所依赖的任何构建过程或依赖链发生冲突。jOR28资讯网——每日最新资讯28at.com

浏览器渲染 HTML,因此无需编译器或转译器即可使用 htmx。虽然许多 htmx 用户很乐意使用 JSX 渲染 API 响应,但 htmx 与经典模板引擎配合得很好,使其可移植到你喜欢的任何语言。不管你对 Django 和 Rails 有何看法,但它们在 2008 年和今天都很重要 — htmx 与它们无缝集成。这是 htmx 驱动开发的一个反复出现的主题:htmx 与新旧开发工具都能很好地配合,因为所有这些工具的共同点是 HTML,而 htmx 是用于编写 HTML 的。jOR28资讯网——每日最新资讯28at.com

图片jOR28资讯网——每日最新资讯28at.com

推动用户主要通过 HTML 而不是 JS 来定义其应用程序的行为有太多优点,本文无法一一介绍,因此我将重点谈谈人们最痛恨的 JavaScript 成名之作:“churn”。根据你编写 React 应用程序的时间,你可能在编写表单时使用了受控类组件、react Hooks 或这种实验性的 <form> 扩展。这确实让人抓狂,尤其是如果你和我一样,最初是通过类组件学习如何制作网络表单的。jOR28资讯网——每日最新资讯28at.com

然而,无论你是何时编写的 htmx 应用程序,htmx 表单的行为都是以与普通 HTML 表单大致相同的方式定义的:使用 <form>。随着 htmx 增加了额外的网络功能,你终于可以使用 PUT 请求并控制响应的去向,但在所有其他方面--验证、输入、标签、自动完成--你都只能使用默认的 <form> 元素行为。jOR28资讯网——每日最新资讯28at.com

最后,因为 htmx 只是在一个非常狭窄的域中扩展 HTML(网络请求和 DOM 替换),所以你编写的大多数“htmx”只是普通的旧 HTML。当你可以访问复杂的状态管理机制时,实现自定义可折叠 div 变得非常容易;如果不这样做,你可能会停下来足够长的时间来搜索 <details> 元素。每当问题可以通过本机 HTML 元素解决时,代码的寿命就会大大提高。这是一种学习 Web 开发的不太陌生的方式,因为只要 HTML 存在,你的大部分知识就将保持相关性。jOR28资讯网——每日最新资讯28at.com

在这方面,htmx 比 React 更像 jQuery(htmx 的前身 intercooler.js 是 jQuery 扩展),但它通过使用声明性的、基于 HTML 的界面对 jQuery 进行了改进:jQuery 让你转到 <script> 标签来指定AJAX行为,htmx只需要一个简单的 hx-post 属性。jOR28资讯网——每日最新资讯28at.com

简而言之,虽然 htmx 可以用作框架,但与 JavaScript 框架相比,它与 Web 语义的偏差要小得多,并且将受益于这些语义的改进,而无需用户进行额外的工作,这要归功于 Web 的出色性能向后兼容性保证。如果你想建立一个持续很长时间的网站,这些品质使 htmx 成为比许多同时代网站更好的选择。jOR28资讯网——每日最新资讯28at.com

注:尽管卡森(Carson)同意这一分析,认为这篇文章没有逻辑缺陷,并允许我在他的网站上发表,但他仍然坚持认为 htmx 是一个库。jOR28资讯网——每日最新资讯28at.com

图片图片jOR28资讯网——每日最新资讯28at.com

原文:https://htmx.org/essays/is-htmx-another-javascript-framework/jOR28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-60950-0.htmlHtmx 只是另一个 JavaScript 框架吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C# 登顶!超越Java或非空想

下一篇: Python 3各版本的新特性对比

标签:
  • 热门焦点
  • 中兴AX5400Pro+上手体验:再升级 双2.5G网口+USB 3.0这次全都有

    2021年11月的时候,中兴先后发布了两款路由器产品,中兴AX5400和中兴AX5400 Pro,从产品命名上就不难看出这是隶属于同一系列的,但在外观设计上这两款产品可以说是完全没一点关系
  • Redmi Pad评测:红米充满野心的一次尝试

    从Note系列到K系列,从蓝牙耳机到笔记本电脑,红米不知不觉之间也已经形成了自己颇有竞争力的产品体系,在中端和次旗舰市场上甚至要比小米新机的表现来得更好,正所谓“大丈夫生居
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 重估百度丨大模型,能撑起百度的“今天”吗?

    自象限原创 作者|程心 罗辑2023年之前,对于自己的&ldquo;今天&rdquo;,百度也很迷茫。&ldquo;新业务到 2022 年底还是 0,希望 2023 年出来一个 1。&rdquo;这是2022年底,李彦宏
  • iQOO Neo8系列或定档5月23日:首发天玑9200+ 安卓跑分王者

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
  • 苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
Top