成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Htmx:后端主導的前端框架是啥樣的?

開發(fā) 前端
Htmx是一款在Django技術棧最近比較熱門的前端框架。他的理念是 —— 「讓網(wǎng)頁回歸HTML的本質,不再受JS束縛」。是不是很有web1.0的風格?

大家好,我卡頌。

前端領域這幾年涌現(xiàn)了很多新興的前端框架,比如Qwik?、Svelte?、Astro等。

這些框架多以「前端工程師」作為受眾。

那么,以「后端工程師」作為受眾的前端框架是啥樣的,他與前者有什么區(qū)別呢?

介紹htmx

htmx?是一款在Django技術棧最近比較熱門的前端框架。

他的理念是 —— 「讓網(wǎng)頁回歸HTML的本質,不再受JS束縛」。是不是很有web1.0的風格?

他是怎么做到的呢?答案是:通過大量預制的自定義HTML屬性。

當你在頁面中引入htmx.org.js?后,可以在HTML?中書寫以hx-開頭的自定義屬性。比如下面的代碼:

<button 
hx-post="/data"
hx-trigger="click"
>
點我請求data
</button>

點擊按鈕(hx-trigger指定的click事件)后,會向data接口(hx-post指定)發(fā)起post請求。

那請求返回的數(shù)據(jù)如何顯示呢?我們再增加2個自定義屬性:

<button 
hx-post="/data"
hx-trigger="click"
hx-target="#parent-div"
hx-swap="outerHTML"
>
點我請求data
</button>

hx-target指代「返回的HTML結構」會被注入到哪里。這里會被注入到「id為parent-div的DOM」中。

hx-swap指代「返回的HTML結構會以什么形式注入」。這里會直接替換「id為parent-div的DOM」。

如果hx-swap="innerHTML"?,則代表會以「id為parent-div的DOM」的innerHTML形式注入。

如果要表達復雜的邏輯,需要結合很多自定義屬性與屬性值,比如下面的代碼:

<input 
type="text"
hx-get="/trigger_delay"
hx-trigger="keyup changed delay:500ms"
hx-target="#search-results"
placeholder="Search..."
>

當input?觸發(fā)keyup?事件且值改變后,延遲500ms,向trigger_delay?接口發(fā)起請求,返回的HTML結構被注入到「id為search-results的DOM」中。

與其說htmx是一款前端框架,更貼切的說,他應該是一款「HTML自定義屬性工具庫」。

他將很多常見JS?交互邏輯收斂到自定義HTML?屬性中,借此減少JS代碼量。

現(xiàn)代前端框架通常是「狀態(tài)驅動UI」,而htmx?的理念是「過程驅動UI」(類似jQuery時代編寫頁面的方式)。

如果希望引入狀態(tài),需要以插件的形式引入alpine-morph。

相比于:

  • React:基于JSX。
  • Vue:基于模版語法。

alpine?是一款基于HTML的前端框架。

這意味著使用alpine?需要直接在HTML?中以自定義屬性的形式書寫狀態(tài)(與Vue v1?類似)。所以,他能很好的融入htmx的體系中。

比如下面這段代碼是段結合htmx與alpine的HTML?,其中以hx-?開頭的是htmx?屬性,以x-?開頭的是alphine屬性:

<div hx-target="this" hx-ext="alpine-morph" hx-swap="morph">
<div x-data="{ count: 0, replaced: false,
message: 'Change me, then press the button!' }">
<input type="text" x-model="message">
<div x-text="count"></div>
<button x-bind:style="replaced && {'backgroundColor': '#fecaca'}"
x-on:click="replaced = true; count++"
hx-get="/swap">
Morph
</button>
</div>
</div>

這段代碼包含了交互邏輯與前端狀態(tài),最重要的是:他是合法的HTML(而不是JSX或模版語法這樣的DSL),這意味著他能輕松的在前后端之間傳遞,并在前端展示。

交互邏輯守恒

本質來說,網(wǎng)頁的最終消費品是HTML與CSS?。開發(fā)者編寫交互邏輯改變HTML與CSS。

前端工程師習慣在網(wǎng)頁中通過JS編寫交互邏輯。

后端工程師習慣在后端編寫交互邏輯。比如在htmx?中,請求返回的是HTML?結構,這部分「生成HTML的邏輯」是在后端controller?中實現(xiàn)的(而不是在前端通過JS生成)。

除此之外,還有一部分交互邏輯是在后端「HTML模版」中產生的。下圖是Django?中結合htmx的后端模版代碼示例:

圖片

不管交互邏輯在前端還是后端實現(xiàn),也不管用哪種語言實現(xiàn),他是一定需要實現(xiàn)的,也就是說「交互邏輯守恒」。

但是,交互邏輯在前端還是后端實現(xiàn),對頁面帶來的影響是不同的。

對頁面性能的影響

交互邏輯在前端實現(xiàn)的越多,意味著「越多的JS代碼」,如果這部分代碼是首屏渲染所需的,那意味著更差的FCP[1]指標。

如果這部分代碼是后續(xù)交互所需的,那意味著更差的TTI[2]指標。

為了減少前端JS?資源對性能的影響,前端框架都在逐步向后迭代,比如Next.js?之于React?,Nuxt.js?之于Vue。

新興框架中的Astro?、Qwik等也是類似思路。

而本文聊的htmx?作為后端主導的前端框架,本身的立足點就是后端的view層,所以天生就是頁面性能友好的。

總結

根據(jù)「交互邏輯守恒」,交互邏輯一定需要實現(xiàn),不是在前端就是在后端。

傳統(tǒng)來說,前端框架將交互放在前端,這會造成JS資源變大,影響性能。

單純從功能來講,htmx僅僅是個「HTML自定義屬性工具庫」,他將一部分交互收斂到自定義屬性中,減少前端交互邏輯。

剩下的交互邏輯放在后端的view?(作為頁面模版),或controller?(將HTML?作為接口返回值),以此減少前端JS資源的體積。

對于頁面交互復雜度不高,且是后端主導的項目(不想寫JS?邏輯),相信htmx會是不錯的選擇。

參考資料

[1]FCP:https://web.dev/fcp/。

[2]TTI:https://web.dev/tti/。

責任編輯:姜華 來源: 魔術師卡頌
相關推薦

2024-05-08 08:20:20

HTMX前端開發(fā)

2024-03-28 13:13:00

Htmx前端開發(fā)框架

2020-09-11 08:46:39

后端框架開發(fā)

2023-12-04 06:55:16

2024-04-26 12:39:55

OLAP架構存儲

2024-05-06 00:00:00

2023-09-28 13:30:06

HtmxWebJavascript

2020-12-24 16:54:14

后端開發(fā)框架

2023-10-19 08:38:18

2016-05-31 15:24:15

APP前后端

2024-01-15 00:35:23

JavaScript框架HTML

2020-10-08 18:20:54

前端后端架構

2023-04-10 15:14:03

2010-11-16 09:07:22

JavaScript

2022-10-10 11:32:01

數(shù)據(jù)分析技術

2016-03-09 11:25:39

前端開發(fā)工程師簡歷

2023-10-07 08:00:00

JavaScriptHTMX

2020-04-22 15:20:39

前端框架代碼

2015-12-08 10:48:11

5G手機網(wǎng)絡

2021-11-02 10:01:35

XXR 渲染前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩在线一区 | 欧美综合一区 | 操操操日日日 | 91麻豆精品国产91久久久久久 | 国产精品自拍视频 | 欧美日韩中文字幕在线 | 99精品一区 | 91精品国产综合久久婷婷香蕉 | 免费国产视频在线观看 | 久久久91 | 免费一区二区 | 伊人成人免费视频 | 国产激情一区二区三区 | 免费看a | 国产精品久久久久久久久图文区 | 爱操影视 | 中文字幕一区二区三区四区五区 | 日本淫视频 | 亚洲综合在线视频 | 中文字幕的av | 国产激情在线 | av久久 | www.久久| 日韩精品久久一区 | 蜜臀网| 亚洲欧美激情精品一区二区 | 99免费精品| 午夜影院黄| 天天欧美 | 亚洲成人在线免费 | 久久精品国产一区二区电影 | 成人免费视频网站 | 天堂网av在线| 日韩欧美精品在线播放 | 久久综合成人精品亚洲另类欧美 | 欧美黄在线观看 | 国产一区二区三区在线 | 91精品免费视频 | 高清黄色毛片 | 国产色在线 | 久久久久一区 |