整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

让 React 代码行数减少78%的 htmlx 有

让 React 代码行数减少78%的 htmlx 有这么神?

家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!

高级前端?进阶

前言

htmx 使开发者可以使Attribute直接在 HTML 中访问 AJAX、CSS Transitions、WebSocket 和SSE等前端常用事件,从而使得构建强大功能的现代用户界面更加简单。

HTMLX:强大的 HTML 工具

htmx 库的代码体积很小,启动Gzip压缩后大约~12k,而且无其他依赖,可扩展,兼容 IE11 。更加出彩的是,与React 相比,代码库大小减少了 67%。

1.什么是 HTMX,为什么它很重要?

1.1 HTMLX的起源

Carson Gross 创建了一个前端库 intercooler.js,Slogan是“Ajax With Attributes”,intercooler.js的目标很简单,目的在于简化前端 Web 开发的复杂性。 intercooler.js 的新版本在2021年更新到了 2.0 版,作者正式命名为 htmx,也就是本文的主角。

1.2 HTMLX的目标

HTMX 试图通过使用网络的原始模型来创建应用程序,从而利用 HTML 的强大力量。 使用HTMX的时候,开发人员无需编写复杂的JS代码来实现类似的功能,借助于HTMLX属性即可实现动态内容和更新。比如:进度条、延迟加载、无限滚动、内联验证等。

HTMX 不同于 Vue.js 、 React、Angular 等前端框架,需要通过客户端请求服务端的数据并动态渲染页面。 使用 HTMX的时候,客户端发出请求,服务端将返回完整的 Html 并更新页面。 同时,可以将 HTMX 与任何服务器端技术集成,因为应用程序逻辑主要由后端处理。

2.HTMX典型示例

2.1 建立Websocket

如果想在 htmx 中建立一个 WebSocket 连接,可以使用 hx-ws 属性来完成:

<div hx-ws="connect:wss:/chatroom">
    <div id="chat_room">
        ...
    </div>
    <form hx-ws="send:submit">
        <input name="chat_message">
    </form>
</div>

connect 声明建立了连接,而 send 声明告诉表单在提交时将值提交到套接字socket。

2.2 建立服务端发送事件SSE

服务器发送事件是服务器向浏览器发送事件的一种方式。 它为服务器和浏览器之间的通信提供了比 websockets 更高级别的机制。

如果想让一个元素通过 htmx 响应服务器发送的事件,需要做两件事:

  • 定义 SSE 源。 为此,请在父元素上添加一个 hx-sse 属性,其中包含一个连接 <url> 声明,该声明指定将从中接收服务器发送事件的 URL。
  • 使用 hx-trigger="sse:<event_name>" 语法定义由服务器发送的事件触发的此元素的后代元素
<body hx-sse="connect:/news_updates">
    <div hx-trigger="sse:new_news" hx-get="/news"></div>
</body>

2.3 HTMX 同步请求

假设希望一个元素的请求替代另一个元素的请求,或者想要等到另一个元素的请求完成后再发送另外一个请求,可以使用 hx-sync 属性。 比如下面的代码:

<form hx-post="/article">
    <input id="title" name="title" type="text" 
        hx-post="/validate" 
        hx-trigger="change"
    >
    <button type="submit">提交</button>
</form>

在不使用 hx-sync 的情况下,当填写并提交表单时,它会同时触发对 /change 和 /validate 的两个并行请求。使用 hx-sync="closest form:abort" 后,将监视表单上的请求并在存在表单请求时停止输入请求,或者在输入请求运行时启动:

// 同步请求示例
<form hx-post="/article">
    <input id="title" name="title" type="text" 
        hx-post="/validate" 
        hx-trigger="change"
        hx-sync="closest form:abort"
    >
    <button type="submit">提交</button>
</form>

2.4 轮询

如果想让一个元素轮询给定的 URL 而不是等待一个事件,可以使用带有 hx-trigger 属性的 every 语法:

<div hx-get="/news" hx-trigger="every 2s"></div>


这相当于告诉 htmx 每 2 秒,向 /news 发出 GET 请求并将响应加载到 div。 如果想停止从服务器响应中进行轮询,可以使用 HTTP 响应码 286 进行响应,该元素将取消轮询。

2.5 负载轮询

另一种可用于在 htmx 中实现轮询的技术是“负载轮询”,其中元素指定加载触发器和延迟,并用响应替换自身:

<div hx-get="/messages"
    hx-trigger="load delay:1s"
    hx-swap="outerHTML"
>
</div>

负载轮询在轮询有终点的情况下很有用,在该点轮询终止,例如当您向用户显示进度条时。

3.HTMX vs. React对比

HTMX vs. React

从Github数据来看,目前React的star已经达到了202k,而htmlx只有10.7k,这个差距确实还很大,但是考虑到React项目创建已经11年,而htmlx只有3年,能达到10.7k已经确实不易。

接下来看看NPM的周下载量数据。

React的周下载量达到了惊人的16,759,035,而htmlx只有17,679,这个差距就像上面star的差距一样明显。当然,正如上文所说,htmlx项目的创建时间相对较短,所以在知名度、生态方面肯定还没法和React同日而语,但是17,679的周下载量确实也表明已经囊括了很大一部分用户群。

然后回到大家可能都比较关心的代码体积上,bundlephobia的官方数据表明htmlx压缩后达到了37.8k(远大于React@18.2.0的6.4k),即使启动Gzip压缩后也达到了13.2k(远大于React@18.2.0的2.5k)。所以,可以从侧面反应出,htmlx通过属性的方式确实使得代码行数减少了,但是库本身的代码体积却在悄悄增大。

4.本文总结

从总体来看,HTMX 确实比较有意思,特别是已经习惯了jQuery用法的开发者,可以在下一个项目中尝试使用HTMX。 本文介绍了如何使用HTMLX建立Websocket 、建立服务端发送事件SSE 、HTMX 同步请求 、轮询 、负载轮询等示例。同时对比了React和htmlx的开发者相关数据。

因为笔者也没有在生产项目中使用、部署过HTMLX项目,所以很多探索也就点到为止,但是文末的参考资料提供了大量优秀文档以供学习,如果有兴趣可以自行阅读。


参考资料

https://www.infoq.cn/article/veskosrskc9xgiyygyku

https://github.com/bigskysoftware/htmx

https://thenewstack.io/htmx-html-approach-to-interactivity-in-a-javascript-world/

https://htmx.org/docs/

天上班前二十分钟都是学习的时间,虽然这些内容都学习了好多次,但是温故而知新,html/htm/shtml它们仨的区别你知道吗?虽然网络推广、网络营销不是开发网站的,但是基本的代码标签还是需要知道的,有利于我们做网站的SEO优化,所以是必不可少的。

html 和htm的区别


百度百科解释:

htm与.html并没有本质上的区别,表示的是同一种文件,不同的命名只是因为于不同的环境。 在Unix、Windows NT和Windows 95操作系统中,由于都支持长文件名格式,超文本文件文件名和扩展名长度可以不受限制,但扩展名必须是.HTML或 是.HTM。Unix系统的扩展名必须为.HTML,如果使用了三个字符的扩展名.HTM,那么当网上的Unix系统用户浏览你的超文本文件时,只能在屏幕上看到超文本的源文件,而不是展示的结果;若访问你的用户系统是Windows 3.X、Windows NT 或Windows 95,那么文件扩展名是HTML和HTM是一样的。所以Unix系统用户建立超文本时,文件扩展名一定要采用.HTML。

简单可以理解如下:

1、.htm与.html没有本质上的区别,表示的是同一种文件,只是适用于不同的环境之下。

2、DOS仅能识别8+3的文件名,所以*.htm的命名方法可以被DOS识别,而*.html的文件命名方式不能被之识别。

3、在UNIX系统中,网页必须使用.html扩展名,如果是htm,在浏览器中打开时则出现源代码;Windows中支持两种扩

展名。也可以说,htm和html是Windows和UNIX对抗的产物。

4、如果在网页中同时存在index.html与index.htm,这是浏览器将先解释index.html。

其它理解:

就是说实际上一样的,比方有个html的文件,你重命名为htm也没关系,IE还是能识别他并且打开。 但是我们在浏览器地址栏打开某个网址的时候,htm和html是完全不同的两个文件了,指向了不同的服务器地址,其实说白了就是后缀名不同而已, 比如在电脑上搜索*.htm与*.html搜索出来不同。

SHTML和HTML的区别



百度百科解释:

如果用一句话来解释就是:SHTML 不是HTML而是一种服务器API,shtml可通过服务器动态产成html.

虽然两者都是超文本格式,但shtml是一种用于SSI技术的文件。也就是Server Side Include--SSI服务器端包含指令。

如果Web Server有SSI功能的话(大多数(尤其是基于Unix平台)的WEB服务器如Netscape Enterprise Server等均支持SSI命令)。

会对shtml文件特殊招待。先扫一次shtml文件看有没有特殊的SSI指令存在。有就按Web Server设定规则解释SSI指令。解释完后跟一般html一起调去客户端。

html或htm与shtml或shtm的关系是什么?

html或者htm是一种静态的页面格式,也就是说不需要服务器解析其中的脚本,或者说里面没有服务器端执行的脚本,而shtml或者shtm由于它基于SSI技术,当有服务器端可执行脚本时被当作一种动态编程语言来看待,就如asp、jsp或者php一样。

当shtml或者shtm中不包含服务器端可执行脚本时其作用和html或者htm是一样的。

时刻钟


以上分享文字是个人原创观点,如有问题可评论讨论学习,如涉及到商业等法律问题与本人无关。


是搜狐文化第65期荐展

为便于公众查询浏览,国家文物局组织对各地制作的网上博物馆展览进行了汇总,现推送第三批网上展览资源。具体展览如下,复制链接或搜索官网即可“云看展”:

在线展览

101.律动世界——化学元素周期表专题展

中国科学技术馆

https://xnmy.cdstm.cn/vr/78808/

102.中国人民解放军建军90周年主题展

中国人民革命军事博物馆

http://www.jb.mil.cn/zlcl/ztzl/jj90zn/

103.《伟大胜利 历史贡献——纪念中国人民抗日战争暨世界反法西斯战争胜利70周年主题展览》虚拟展览

中国人民抗日战争纪念馆

http://www.1937china.com/kzgdata/clzl/vrzl/wdsllsgx/tour.html

104.笔墨书香——中国印刷文化探源专题展

中国印刷博物馆

http://pano.printingmuseum.cn/YinBo_BiMoShuXiang/pano/index.html

105.光辉的历程——中华全国妇女联合会成立70周年纪念展

中国妇女儿童博物馆

https://www.kuleiman.com/114341/index.html?from=singlemessage&isappinstalled=0

106.雷锋,一个汽车兵的任务

北京汽车博物馆

http://ls.kanzhanlan.cn/wx/ygqcbdgs/1/index.html

107.海洋与天文

天津国家海洋博物馆

https://www.hymuseum.org.cn/uploadfiles/360data/haiyangyutianwen/?scene_id=31259669

108.丝绸之路自然大观

天津自然博物馆

http://demo.720a.com/tianjinziranbowuguan/index.html

109.山河相依 窑火辉映——晋陕豫冀宋辽金元陶瓷特展

运城博物馆

http://720.sxycbwg.com/shxyyhhy/int/

110.遗我双鲤鱼——馆藏明代书画家书札精品展

上海博物馆

https://www.shanghaimuseum.net/museum/shuangli/index.html

111.正义的审判——纪念东京审判宣判71周年图片展

侵华日军南京大屠杀遇难同胞纪念馆

https://720yun.com/t/8avkuliy5p7?scene_id=37846583

112.审计博物馆基本陈列

审计博物馆

http://www.audit.gov.cn/museum//static/shenji/index.html

113.丝路岁月:大时代下的小故事

中国丝绸博物馆

http://www.chinasilkmuseum.com/yz/info_18.aspx?itemid=27318

114.牦牛走进浙江——高原牦牛文化展

浙江自然博物院

http://audio.taoart.com/fullview/zrbwy/2/?from=singlemessage

115.华侨旗帜 民族光辉

陈嘉庚纪念馆

http://www.tankahkee.cn/Exhibition/Basic/11026.html

116.“闽台缘”主题陈列

福建中国闽台缘博物馆

http://vr1.mtybwg.org.cn/

117.奋进的山东——庆祝中华人民共和国成立70周年成就展

山东博物馆

http://www.sdmuseum.com/fjdsd/index.html

118.阿富汗国家宝藏展

郑州博物馆

http://afh.hnzzmuseum.com/?scene_id=17436508

119.从地中海到中国——平山郁夫藏丝绸之路文物展

洛阳博物馆

http://vr.sichouzhilu.museumcloud.com.cn/

120.甲骨文发现120年系列展——商代文字展

安阳博物馆

http://www.aybwg.org/anbozhanlan/show.php?itemid=74

121.鼎盛中华——中国鼎文化特展

二里头夏都遗址博物馆

https://720yun.com/t/15vkuyrlr17#scene_id=39583514

122.红色大别山

鄂豫皖苏区首府革命博物馆

http://www.hongsedibiao.com/web/720view/hn/eywsq/index.html?from=singlemessage&isappinstalled=0

123.根·魂——中华文明物语

湖南省博物馆

http://www.hnmuseum.com/sites/default/files/statics/online-exhibitions/culture/?scene_id=29859685

124.湘江北去——长沙古代历史文化陈列

长沙博物馆

http://beixinbc.com/cbwg/index.html?startscene=scene13

125.翟门生的世界

深圳市南山博物馆

http://webapp.vizen.cn/museum_exhibition/indexpc.html?albumid=8E6F73AEE3324F2BBB0D4A7D09E4FA11&online=on&from=singlemessage&isappinstalled=0

126.伟大壮举 辉煌历程

重庆三峡移民纪念馆

http://www.cqsxymjng.cn/360vr/wdzj/tour.html

数字全景展厅

127.平北抗日烈士纪念园数字博物馆(PC端)

平北抗日烈士纪念馆

http://www.bjyq.gov.cn/yanqing/xwdt/ztlb/2197720/index.shtml

128.北京市大葆台西汉墓博物馆3D在线展厅

北京市大葆台西汉墓博物馆

http://gzh.dbtbwg.org.cn:8080/wechat/cultural/list.htm

129.辽中京博物馆虚拟展览

辽中京博物馆

http://nm.comeup.com.cn:8088/nm/lzjbwg/index.html

130.内蒙古自治区将军衙署博物院虚拟博物馆

内蒙古自治区将军衙署博物院

http://nm.comeup.com.cn:8088/nm/jjys/index.html

131.鄂尔多斯青铜器博物馆全景展厅

鄂尔多斯青铜器博物馆

https://720yun.com/t/212jrghasf4?from=timeline&isappinstalled=0

132.中华人民共和国成立70周年——国旗、国徽、国歌专题展

东北烈士纪念馆

https://view.vra.cn/#/panoview/70616

133.鲁迅故居虚拟浏览

上海鲁迅纪念馆

http://preview.bluenion.com/luxun_home/Luxun_home.html

134.陈云纪念馆720°全景漫游

陈云纪念馆

http://wgj.sh.gov.cn/images/odb/360/vtour/index.html

135.南京博物院虚拟展览

南京博物院

http://fight.njmuseum.com/index.html

136.南京中国科举博物馆虚拟博物馆

南京中国科举博物馆

http://117.81.233.142:8081/vr/examples/index.html

137.八大山人纪念馆网上展厅

八大山人纪念馆

https://720yun.com/t/qqw27w4ly3sd93zwi9?from=singlemessage&isappinstalled=0

138.安徽中国徽州文化博物馆全景展厅

安徽中国徽州文化博物馆

https://720yun.com/t/310jz0wnkn2?scene_id=8706118

139.临沂市博物馆全景漫游

临沂市博物馆

http://vr.lywww.com/anli/bowuguan/

140.彭雪枫纪念馆全景导览

河南省镇平县彭雪枫纪念馆

http://m.360vrsh.com/Home/Store/index.html?sid=5661.html

141.鄂豫皖革命纪念馆虚拟展馆

鄂豫皖革命纪念馆

http://eyw.hnssdzzt.cn/720/

142.忠州博物馆网上展馆

忠州博物馆

https://www.zhongzhoubwg.com/list/42

143.VR漫游夔州馆

夔州博物馆

https://720yun.com/t/4f6jt0ku5y3?scene_id=13724372

144.自贡恐龙博物馆360度全景数字博物馆

自贡恐龙博物馆

http://www.zdm.cn/display.html

145.贵州航运博物馆虚拟展馆

贵州航运博物馆

http://museum.zhanxun.site/gzhybug/

146.天祝藏族自治县历史文明展

天祝藏族自治县博物馆

https://720yun.com/t/b9vkibd9zih?scene_id=37651977#scene_id=37651977

文物数字化展示

147.北京自然博物馆馆藏标本

北京自然博物馆

http://www.bmnh.org.cn/gzxx/list.shtml

148.伪满皇宫博物院文物全息展示系统

伪满皇宫博物院

http://222.169.185.251:8088/

149.“红色记忆”革命文物平台

杭州市园林文物局

http://z.hangzhou.com.cn/2019/hsjywspzj/index.htm

150.中山市博物馆馆藏文物3D展示

中山市博物馆

http://www.zsmuseum.cn/3DWW/index.html

以上内容来自国家文物局官方网站:http://www.sach.gov.cn/art/2020/2/6/art_722_158631.html