国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何結(jié)合使用HTML與Htmx并減少JavaScript代碼量

譯文
開(kāi)發(fā) 前端
本文將介紹Htmx以及它如何幫助用戶在服務(wù)器上重用元素、減少JavaScript代碼量,并避免構(gòu)建。

譯者 | 李睿

審校 | 孫淑娟

HTML作為宇宙的中心  

眾所周知,全球互聯(lián)網(wǎng)得以蓬勃發(fā)展在很大程度上歸功于HTML和CSS。Javascript(JS)可以充當(dāng)HTML和CSS之間的粘合劑,使頁(yè)面更具動(dòng)態(tài)性和交互性,但Web編程的歷史發(fā)展不同。在客戶端渲染和其他類似技術(shù)出現(xiàn)之后,使用JS創(chuàng)建Web應(yīng)用程序變得更加困難。  

什么是Htmx?  

Htmx是一個(gè)庫(kù),允許用戶使用簡(jiǎn)單的標(biāo)記創(chuàng)建現(xiàn)代且強(qiáng)大的用戶界面。多虧有了它,可以直接從HTML元素執(zhí)行AJAX請(qǐng)求、觸發(fā)CSS轉(zhuǎn)換、調(diào)用WebSocket和服務(wù)器發(fā)送的事件。  

SSR應(yīng)用  

Htmx的使用促使人們逐漸放棄客戶端渲染(CSR),轉(zhuǎn)而支持服務(wù)器端渲染(SSR)。服務(wù)端渲染(SSR)被認(rèn)為是最后的手段,只有在需要快速提高性能時(shí)才使用。但是,服務(wù)端渲染(SSR)可以構(gòu)建應(yīng)用程序的整個(gè)用戶界面。  

Htmx不需要任何其他JS包即可運(yùn)行,并且與框架和語(yǔ)言無(wú)關(guān)。因此,它可以與任何服務(wù)器平臺(tái)一起使用,例如NodeExpress、RAILS、Django、Phoenix、Laravel等。  

重用服務(wù)器上的組件  

Htmx允許用戶使用更熟悉的庫(kù)重用服務(wù)器端用戶界面(UI)元素;例如,用于Node的Pug或用于RAILS和Django的模板庫(kù)。它有助于使HTML變得復(fù)雜和動(dòng)態(tài)。  

這里是RentalsListing,一個(gè)使用Express.js和HTML構(gòu)建的演示應(yīng)用程序。它對(duì)統(tǒng)計(jì)和動(dòng)態(tài)場(chǎng)景使用相同的部分:

HTML 
ul.results
each rental in rentals
li
article.rental
button.image(type="button", _="on click toggle .large then if #view-caption.textContent === 'View Larger' then set #view-caption.textContent to 'View Smaller' else set #view-caption.textContent to 'View Larger'")
img(src=rental.attributes.image, alt='An image of ' + rental.attributes.title)
small#view-caption View Larger
.details
h3
a(href='/rentals/' + rental.id) #{rental.attributes.title}
.detail.owner
span Owner:
| #{rental.attributes.owner}
.detail.type
span Type:
| #{rental.attributes.category}
.detail.location
span Location:
| #{rental.attributes.city}
.detail.bedrooms
span Bedrooms:
| #{rental.attributes.bedrooms}
.map
img(alt='A map of ' + rental.attributes.title, src=rental.mapbox, width="150",height="150")

在主頁(yè)的列表中,使用了Pug庫(kù)中的include來(lái)顯示部分內(nèi)容:

HTML 
extends layout
block content
.jumbo
.right
h2 Welcome to Super Rentals!
p We hope you find exactly what you're looking for in a place to stay.
a.button(href="/about") About Us
.rentals
label
span Where would you like to stay?
input.light(type="text", name="search",
hx-post="/search" ,
hx-trigger="keyup changed delay:500ms" ,
hx-target=".results" ,
hx-indicator=".htmx-indicator")

include includes/rental-list.pug

每次用戶在網(wǎng)站上搜索租賃房產(chǎn)時(shí),都可以使用相同的部分填充搜索結(jié)果。結(jié)果如下所示:

JavaScript 
app.post('/search', (req, res) => {
const { search } = req.body;

const results = _rentals.data.filter(r => {
const _search = search.toLowerCase();
const _title = r.attributes.title.toLowerCase();
return _title.includes(_search);
});
const template = pug.compileFile('views/includes/rental-list.pug');
const markup = template({ rentals: results });
res.send(markup);
});

服務(wù)器端路由  

客戶端路由帶來(lái)了一系列問(wèn)題。例如,在基于散列的路由和基于URL的路由之間總是存在一個(gè)兩難選擇。由于舊版瀏覽器(如Internet Explorer 11)不支持歷史API,因此在URL中使用片段ID的基于哈希的路由幾乎總是首選。  

大多數(shù)JS框架都實(shí)現(xiàn)了自己的客戶端路由邏輯。同時(shí),所有框架都使用自己的瀏覽器API,例如window.history。這導(dǎo)致應(yīng)用程序中出現(xiàn)大量樣板代碼。  

更少的JS代碼  

Htmx的主要優(yōu)勢(shì)在于編寫(xiě)并發(fā)送到瀏覽器的JS代碼量。與hyperscript一起,該庫(kù)允許用戶創(chuàng)建豐富的交互式應(yīng)用程序,而無(wú)需使用JS中的客戶端代碼:

HTML 
<!-- have a button POST a click via AJAX -->
<button hx-post="/clicked" hx-swap="outerHTML">
Click Me
</button>

當(dāng)單頁(yè)應(yīng)用剛開(kāi)始流行時(shí),社區(qū)采用JSON作為數(shù)據(jù)交換的標(biāo)準(zhǔn)。現(xiàn)在,為了從JSON數(shù)據(jù)中對(duì)HTML進(jìn)行逆向工程,用戶通常需要處理通過(guò)API來(lái)自服務(wù)器的大量客戶端數(shù)據(jù)。API響應(yīng)通常包含不完整或冗余的數(shù)據(jù)。  

為了解決這個(gè)問(wèn)題,已經(jīng)開(kāi)發(fā)了像GraphQL這樣的復(fù)雜替代方案,因此用戶只能從服務(wù)器獲取所需的數(shù)據(jù)。Htmx提供了更好的解決方案:只需將HTML替換為從服務(wù)器接收到的HTML響應(yīng),而不再需要客戶端數(shù)據(jù)。  

不再構(gòu)建/編譯  

Htmx的另一個(gè)優(yōu)點(diǎn)是不再采用Web應(yīng)用程序構(gòu)建工具。可以改用CDN工具:

HTML 
<!-- Load from unpkg -->
<script src="<https://unpkg.com/htmx.org@1.3.3>"></script>

不再構(gòu)建是Web應(yīng)用程序開(kāi)發(fā)的全球趨勢(shì)。一方面,ES模塊規(guī)范已經(jīng)被所有瀏覽器開(kāi)發(fā)者所接受。另一方面,現(xiàn)在有了Skypack、Snowpack和Vite工具,可以與CDN和ESM方法結(jié)合使用。所有這些最終將導(dǎo)致客戶端JavaScript的構(gòu)建減少。此外,無(wú)需安裝數(shù)千個(gè)npm包并維護(hù)復(fù)雜的構(gòu)建配置。  

統(tǒng)一代碼庫(kù)  

一個(gè)應(yīng)用程序的兩個(gè)代碼庫(kù)意味著額外的開(kāi)發(fā)挑戰(zhàn)。特別是,需要同步更新部署、兩次配置構(gòu)建管道、更新兩個(gè)庫(kù)中的框架、維護(hù)代碼,并從兩個(gè)源運(yùn)行測(cè)試包。  

Htmx允許用戶將所有代碼組合在一個(gè)地方:由于渲染在服務(wù)器端進(jìn)行,因此不需要單獨(dú)的接口基礎(chǔ)。從長(zhǎng)遠(yuǎn)來(lái)看,這可以為用戶節(jié)省大量時(shí)間和費(fèi)用。此外,開(kāi)發(fā)人員可以更加一致地采取行動(dòng),他們不必檢查兩個(gè)或更多存儲(chǔ)庫(kù)。  

行為原則的局部性(LoB)

LoB原理是由編程理論家Richard Gabriel提出的。他指出,所有開(kāi)發(fā)人員都應(yīng)該努力確保每段代碼的行為在驗(yàn)證時(shí)是顯而易見(jiàn)的。  

Gabriel認(rèn)為,局部性對(duì)于保持代碼易于維護(hù)至關(guān)重要。局部性是一種特性,它允許程序員在看到代碼的一小部分后就可以了解代碼屬于架構(gòu)的哪一部分。  

它看起來(lái)像這樣:  

HTML 
The behaviour of a code unit should be as obvious as possible by looking only at that unit of code
<div hx-get="/clicked">Click Me</div>

缺乏狀態(tài)同步的問(wèn)題  

客戶端狀態(tài)管理產(chǎn)生的問(wèn)題比解決的問(wèn)題多。這一原則的實(shí)現(xiàn)導(dǎo)致客戶端和服務(wù)器端都需要狀態(tài)管理。另一種解決方案是將狀態(tài)存儲(chǔ)在服務(wù)器上。在這種情況下,客戶端充當(dāng)虛擬執(zhí)行器,用于呈現(xiàn)狀態(tài)更改。

這與瘦客戶機(jī)模式類似,瘦客戶機(jī)模式是一種帶有連接到終端服務(wù)器的輕量級(jí)操作系統(tǒng)。這些設(shè)備被用來(lái)創(chuàng)建第一個(gè)用于節(jié)省資源的Web應(yīng)用程序。  

Htmx將幫助用戶避免混淆狀態(tài)管理網(wǎng)絡(luò)中的用戶界面(UI)代碼;例如,雙向數(shù)據(jù)綁定、單向數(shù)據(jù)流和反應(yīng)式數(shù)據(jù)。

原文標(biāo)題:??Removing JavaScript: How To Use HTML With Htmx and Reduce the Amount of Code??,作者:Alexey Shepelev

責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2021-11-22 11:30:37

JavaScript代碼瀏覽器

2023-10-07 08:00:00

JavaScriptHTMX

2025-06-10 08:05:00

JavaScript代碼編程語(yǔ)言

2023-09-03 19:43:46

htmxJavaScript網(wǎng)絡(luò)

2023-10-19 08:38:18

2023-04-17 07:49:34

2025-03-18 07:20:00

JavaScript開(kāi)發(fā)字符串

2025-06-27 08:34:19

2021-09-03 08:21:20

前端代碼模塊

2024-01-15 00:35:23

JavaScript框架HTML

2022-07-18 08:48:06

HtmxHTML

2024-03-22 11:40:40

Node.jsNodeCRUD

2023-10-26 08:00:00

HyperscripJavaScript前端

2021-04-21 08:00:00

Web工具漏洞

2023-07-18 18:44:35

光纖網(wǎng)絡(luò)綜合布線

2024-01-16 09:39:13

Docker系統(tǒng)

2013-08-26 17:41:43

JavaScriptWindows 8.1

2022-04-23 10:55:51

存儲(chǔ)AI/ML對(duì)象鎖定

2021-06-22 10:16:39

Java工具庫(kù)代碼

2025-05-20 08:25:00

解構(gòu)賦值代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

精品sm在线观看| www.av毛片| 欧美尿孔扩张虐视频| 精品国产乱子伦一区| 国产福利在线观看| 亚洲1区2区3区4区| 亚欧激情乱码久久久久久久久| 国产盗摄女厕一区二区三区| 亚洲乱码国产乱码精品天美传媒| 亚洲二区在线| 999国内精品视频在线| 在线观看欧美理论a影院| 欧美黑人性视频| 国产一区 二区| 超碰97人人做人人爱少妇| 国产一区二区三区朝在线观看| 亚洲黄页视频免费观看| 懂色av一区| 日韩精品一区二区三区在线观看 | 18video性欧美19sex高清| 在线视频中文字幕一区二区| 黄页免费在线观看| 亚洲第一在线综合网站| 亚洲第一视频| 欧美日韩亚洲综合在线| 宅男在线观看免费高清网站| 精品免费99久久| 国产污视频在线播放| 亚洲精品久久久一区二区三区| 国产在线美女| 久久精品电影网站| 玖玖玖免费嫩草在线影院一区| 日韩美女在线观看| 久久久久免费av| 豆国产97在线| 老司机久久99久久精品播放免费| 少妇免费毛片久久久久久久久| 美女任你摸久久| 欧美精品卡一卡二| 国产欧美日韩在线| 免费高清在线| 欧美日韩成人综合天天影院| heyzo一区| 久久九九精品99国产精品| 台湾亚洲精品一区二区tv| 亚洲va男人天堂| 免费成人在线观看| 69堂免费视频| 亚洲一区精品在线| 超碰porn在线| 超碰精品一区二区三区乱码| 国产精品久久久久久久免费观看| 日韩一二三区不卡在线视频| 99re这里只有精品6| 黄页视频在线观看| 精品三级av在线| jizz国产精品| 国产日韩一区欧美| 成人黄色777网| 一级二级三级在线观看| 亚洲精品久久久一区二区三区 | 亚洲一区美女| 久久久91精品国产一区二区精品 | 久久久欧美精品sm网站 | 久久久www免费人成精品| 首播影院在线观看免费观看电视| 日韩一区国产二区欧美三区| 日韩免费va| 国产精品久久色| 日韩精品成人一区二区三区| 欧美日韩在线免费播放| 色伊人久久综合中文字幕| 国模视频一区| 国产日韩欧美在线| 国产成人免费视频网站高清观看视频| 在线视频99| 亚洲欧美激情视频| 久久国产电影| 很污的网站在线观看| 色综合久久中文字幕| 久久日本片精品aaaaa国产| 91精品久久久久久久久青青| 韩日av一区二区| 992tv在线观看| 精品无人区太爽高潮在线播放| 不卡日本视频| av在线播放天堂| 欧美日韩国产天堂| 女同久久另类99精品国产| 正义之心1992免费观看全集完整版| 一个色综合av| 91在线成人| 欧美高清视频一区二区三区在线观看| 国产精品短视频| 日本综合字幕| 快播亚洲色图| 亚洲成人高清在线| 岛国av一区| 手机成人在线| 日本高清视频一区二区| 人体久久天天| 欧美在线观看www| 亚洲精品一区二区三区在线观看| 日韩中文字幕高清在线观看| 黄色永久免费网站| 中文字幕日韩精品在线| 日韩成人免费电影| 91社区在线| 国产伊人精品在线| 亚洲天堂精品在线观看| 国产精品中文| 欧美人成在线观看| 亚洲精品久久久久久久久久久久久 | 精品国产成人系列| 翔田千里一区二区| 国产精品色婷婷在线观看| 国产69精品久久久久孕妇| 椎名由奈jux491在线播放| 欧美日韩免费精品| 公共露出暴露狂另类av| 2020国产精品视频| 九九热这里只有精品免费看| 日韩精品资源二区在线| 九色视频成人自拍| 亚洲 自拍 另类小说综合图区| 久久综合一区| 日韩欧美www| 色综合天天狠狠| 性一交一乱一区二区洋洋av| 一本色道久久综合一区| 久久爱另类一区二区小说| 裸体在线国模精品偷拍| 精品亚洲aⅴ乱码一区二区三区| 欧美疯狂party性派对| 免费毛片在线不卡| 97久久亚洲| 99精品小视频| 国语精品一区| 成人av电影在线| 国产一区二区福利| 日韩黄色大片| 蜜桃视频在线观看www社区| 96久久久久久| gay视频丨vk| 日韩一区二区三区不卡视频| 久久综合给合久久狠狠色| 97精品一区二区视频在线观看| 久久精品国产视频| 欧美一区三区二区| 国产免费久久精品| 视频一区国产视频| 视频一区视频二区中文字幕| 欧美激情15p| free性m.freesex欧美| 在线观看的av| 在线免费观看黄色网址| 北条麻妃在线| 性直播体位视频在线观看| 巨大荫蒂视频欧美另类大| 成人影院在线看| www.欧美视频| 卡通动漫精品一区二区三区| 亚洲国产老妈| 日本久久黄色| 91日韩在线专区| 91在线免费播放| 奇米影视一区二区三区| www.av亚洲| mm视频在线视频| 97色伦图片97综合影院| 久久久久久久久99精品大| 国产成人精品免费一区二区| 黑人狂躁日本妞一区二区三区| 91精品国产乱码| 日本电影亚洲天堂| 欧美极品少妇全裸体| 日本高清久久天堂| 黄色永久免费网站| 色偷偷免费视频| 97福利电影| 99在线免费观看| 欧美18—20岁hd第一次| 无码aⅴ精品一区二区三区浪潮| eeuss中文| 成熟丰满熟妇高潮xxxxx视频| 91制片厂免费观看| 精品成人一区二区三区免费视频| 欧美日韩在线精品一区二区三区激情综合| 久久亚洲成人| 捆绑调教美女网站视频一区| 国产欧美精品区一区二区三区| 欧美日韩五月天| 国产成+人+综合+亚洲欧洲| 粉嫩av四季av绯色av第一区| 深夜福利免费在线观看| 亚洲无毛电影| 国模叶桐国产精品一区| 色就是色亚洲色图| 国内精品久久久久久久影视麻豆| 中文字幕日本不卡|