Hacker News 中文摘要

RSS订阅

Htmx——Fetch()的革新 -- </> Htmx – The Fetch()ening

文章摘要

作者原本承诺htmx不会有第三个版本,但暗示可能会推出第四个版本。他通过开发fixi.js项目深入了解了JavaScript的fetch()和异步功能,考虑在保持API稳定的前提下,利用这些新特性重构htmx的内部实现以简化代码库。

文章总结

HTMX 4.0:全面拥抱fetch()的革新

作者:Carson Gross
发布日期:2025年11月1日

配图:停止尝试让fetch()发生

尽管作者曾承诺不会推出HTMX 3.0,但通过技术性调整,现在宣布将直接发布HTMX 4.0版本。这一重大更新源于作者在开发fixi.js过程中对JavaScript异步特性的深入理解,决定对库内核进行彻底重构。

三大核心改进

  1. 全面采用fetch()
    弃用历史遗留的XMLHttpRequest,改用现代fetch() API。虽然事件模型会因此改变,但多数现有功能将保持兼容。

  2. 显式属性继承机制
    通过:inherited修饰符明确声明继承关系(如hx-target:inherited="#output"),取代1.0/2.0版本隐式继承带来的维护难题。

  3. 历史记录管理革新
    取消本地DOM缓存策略,改为网络请求获取历史内容。虽然会提供缓存扩展,但默认行为更接近传统网页导航模式。

保留的核心特性

所有基础功能(hx-get/hx-post等属性)保持不变,确保大多数项目可平滑升级。新版本重点在于简化代码结构,提升长期可维护性。

重要新增功能

  • 流式响应与SSE:基于fetch()的流式API实现渐进式内容更新
  • 内置DOM变形算法:集成idiomorph库实现智能节点更新
  • 局部模板支持:引入<partial>标签简化复杂内容替换
  • 增强视图过渡:建立动画队列防止视觉冲突
  • 标准化事件命名:采用htmx:<阶段>:<系统>的清晰命名规则

升级策略

  • 2.0版本将获得永久维护支持
  • 提供兼容性扩展还原旧版行为
  • 分阶段发布计划:2026年初发布正式版,2027年设为默认版本

当前alpha版本已开放测试,开发者可通过four.htmx.org跟踪开发进展。这次革新旨在保持HTMX简洁哲学的同时,通过现代JavaScript特性提升开发体验。

"当事实改变时,我改变想法。你呢?" ——保罗·萨缪尔森/约翰·梅纳德·凯恩斯

评论总结

总结评论内容如下:

  1. 对长期支持的认可

    • 用户赞赏htmx承诺长期支持旧版本,避免频繁升级压力。
    • 引用:"htmx 2.0 will be supported in perpetuity...if htmx 2.0 is satisfying your hypermedia needs, you can stick with it"
    • 引用:"This is commendable, specially during times when libraries...aren't afraid of breaking changes"
  2. 功能改进建议

    • 用户指出htmx的JSON解析功能不如jQuery方便。
    • 引用:"the hx-on::after-request...does not automatically parse JSON content types like with e.g. jQuery.ajax()"
    • 引用:"people simply questioned why I would ever want to do that"
  3. 版本命名争议

    • 用户对跳过3.0直接发布4.0的做法有不同看法,有人认为幽默,有人质疑开发者的决策。
    • 引用:"technically correct.. the best kind of correct"
    • 引用:"Why would someone use software from such kind of developer is beyond my understanding"
  4. 与其他框架比较

    • 部分用户认为Datastar功能更强大、API更灵活,质疑htmx的价值。
    • 引用:"why use HTMX when it really seems like (a heavier) Datastar-lite?"
    • 引用:"I've come to prefer it...I've come to appreciate the power of SSE streaming"
  5. 技术细节讨论

    • 用户对属性继承的术语使用提出疑问,认为表述不够准确。
    • 引用:"So confusing. I'm pretty sure it should be 'inheritable'"
    • 引用:"'inherited' on an attribute means the attribute is inherited"
  6. 开发进展反馈

    • 用户指出4.0 alpha版本链接不可用,期待稳定版发布。
    • 引用:"the version 4 alpha doesn't appear to be available"
    • 引用:"Looking forward to porting my demos...once V4 is stable enough"
  7. 正面评价

    • 部分用户肯定htmx的技术设计和文档质量。
    • 引用:"very clear technical writing and I learned quite a bit"
    • 引用:"Nice to see HTMX innovating again"