当前位置: 首页 > Web前端 > HTML

htmx:后端主导的前端框架是什么?

时间:2023-03-28 18:57:35 HTML

大家好,我是Kason。近年来前端领域涌现出很多新兴的前端框架,比如Qwik、Svelte、Astro等,这些框架大多面向前端工程师。那么,对于后端工程师作为受众的前端框架到底是什么,它和前者有什么区别呢?欢迎加入人类优质前端框架群。道飞介绍htmxhtmx是最近Django技术栈中比较流行的前端框架。他的想法是——让网页回归HTML的本质,不再受JS的束缚。是不是很web1.0风格?他是怎么做到的呢?答案是:通过大量预制的自定义HTML属性。将htmx.org.js导入页面后,您可以在HTML中编写以hx-开头的自定义属性。例如下面的代码:点我请求数据点击按钮(hx-trigger指定的点击事件)后,数据接口(hx-post规范)发起post请求。如何显示请求返回的数据?让我们再添加2个自定义属性:Clickmetorequestdatahx-target指的是返回的HTML结构将被注入的位置。这将被注入到具有idparent-div的DOM中。hx-swap指的是返回的HTML结构将被注入的形式。这将直接替换id为parent-div的DOM。如果hx-swap="innerHTML",delegate将以id为parent-div的DOM的innerHTML形式注入。如果要表达复杂的逻辑,需要组合很多自定义属性和属性值,比如下面的代码:当输入触发keyup事件,值发生变化时,延时500ms向trigger_delay接口发起请求,返回HTML结构被注入到id为search-resultsmiddle的DOM中。与其说htmx是一个前端框架,不如说它应该是一个HTML自定义属性工具库更合适。他将很多常见的JS交互逻辑汇聚到自定义的HTML属性中,从而减少JS代码量。现代前端框架通常是状态驱动的UI,而htmx的概念是进程驱动的UI(类似于jQuery时代的页面编写方式)。如果要引入state,需要以插件的形式引入alpine-morph。对比:React:基于JSXVue:基于模板语法alpine是一个基于HTML的前端框架。这意味着使用alpine需要直接在HTML中编写状态作为自定义属性(类似于Vuev1)。因此,他可以很好的融入到htmx系统中。比如下面这段代码就是一段html结合了htmx和alpine。htmx属性以hx-开头,alphine属性以x-开头:

Morph
这段代码包含交互逻辑和前端状态,最重要的是:它是合法的HTML(不是JSX或模板语法等DSL),这意味着它可以很容易地在前端和前端之间传递,并在前端显示。从本质上讲,交互逻辑守恒意味着网页的最终消费品是HTML和CSS。开发人员编写交互逻辑来更改HTML和CSS。前端工程师习惯于通过JS编写网页中的交互逻辑。后端工程师习惯于在后端编写交互逻辑。比如在htmx中,请求返回一个HTML结构,而这部分生成HTML的逻辑是在后端controller中实现的(而不是由前端的JS生成)。另外,部分交互逻辑是在后端HTML模板中生成的。下图是Django中结合htmx的后端模板代码示例:不管交互逻辑是在前端实现还是后端实现,无论用哪种语言实现,都必须实现,也就是说,交互逻辑是守恒的。但是无论交互逻辑是在前端还是后端实现,对页面的影响是不同的。对页面性能的影响前端实现的交互逻辑越多,意味着JS代码越多。如果首屏渲染需要这部分代码,则意味着FCP指标更差。如果后续交互需要这部分代码,则意味着更差的TTI指标。为了减少前端JS资源对性能的影响,前端框架逐渐向后迭代,比如React的Next.js,Vue的Nuxt.js。新兴框架中的Astro、Qwik等也有类似的想法。作为后端主导的前端框架,本文所讨论的htmx是基于后端的视图层的,所以天生就是页面友好的。总结根据交互逻辑守恒,交互逻辑必须实现,要么在前端,要么在后端。传统上,前端框架将交互放在前端,会导致JS资源变大,影响性能。从纯功能的角度来看,htmx只是一个HTML自定义属性工具库,将部分交互汇聚成自定义属性,减少前端交互逻辑。剩下的交互逻辑放在后端view(作为页面模板)或者controller(使用HTML作为接口返回值),减少前端JS资源量。对于页面交互复杂度不高,后端主导的项目(不想写JS逻辑),相信htmx会是一个不错的选择。

最新推荐
猜你喜欢