找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2241

积分

0

好友

319

主题
发表于 前天 04:51 | 查看: 8| 回复: 0

这是2026量化新基建系列的第三篇文章。我们的目标是盘点在2026年,要打造一个现代化量化交易系统,你值得关注的那些关键技术。

今天,我们将聚焦于一个关键环节:构建量化交易系统的前端界面。在2026年,你应该使用什么技术?

澳大利亚国立大学的抛物面太阳能聚光器

在互联网上,人们把慷慨分享免费资源与服务的个人或公司称为“赛博活佛”。Cloudflare是公认的典型,而 fast.ai 创始人 Jeremy Howard 教授也当之无愧,因为他开发了一系列以“fast”命名的优秀开源项目,例如 fastai、fastlite,以及我们今天要重点介绍的 FastHTML

时间对每个人都是最公平的资源。在这个意义上,任何能提升我们开发效率、节省宝贵时间的技术,都堪称是开发者的“赛博活佛”。拥抱 FastHTML,正是因为它能让我们事半功倍。

但要想真正理解 FastHTML 的革命性,我们需要先回顾一下,这个领域曾经的统治者是谁,以及它为何仍有不足。

曾经的王者:Streamlit

Streamlit 的创始团队来自 Google X。其核心创始人 Adrien Treuille 曾担任卡内基梅隆大学的计算机科学教授。在 Google X 的经历让他深刻体会到数据科学家(量化研究员同样深有感触)的痛点:他们的母语是 Python,但 Python 却无法用来构建交互式 Web 应用,导致他们无法独立完成哪怕是最简单的数据应用演示。

要构建一个体验良好的 Web 应用,开发者需要掌握 HTML、CSS、JavaScript/TypeScript 乃至 React、Vue.js 等一整套前端技术栈,这曾是前端工程师的专属领域。

为此,Treuille 等人决心打造一个完全基于 Python 的 Web 框架。它与我们熟知的 Django、Flask 等传统框架不同,不仅提供 Web 服务器功能,其核心创新在于:前端界面也可以完全使用 Python 对象甚至 Markdown 文本来构建。这意味着,开发者几乎无需掌握任何前端知识。

在 Streamlit 诞生前,市场上已有类似方案,例如我们在《量化二十四课》中介绍过的 Plotly Dash。Dash 功能强大且灵活,但“复杂性是灵活性的代价”,其学习曲线并不平缓。

这让追求极致简单的 Streamlit 获得了出圈的机会。它将开发 Web 应用的门槛成功降到了极低,迅速成为数据科学家展示工作成果的首选工具。截至目前,它在 GitHub 上已收获超过 43k 的 stars,并于 2022 年被 Snowflake 以 8 亿美元收购。

使用 Streamlit 开发的量化数据管理后台

Streamlit 的成功是现象级的,就像一部开局即巅峰的经典作品。面对这样的“珠玉在前”,我们不禁要问:这个赛道里还有新故事可讲吗?后来者有机会超越前者设定的天花板吗?

答案是肯定的。技术世界从未有终局。Streamlit 开发虽快,但一旦你的应用取得成功,需要支撑成千上万的用户并满足他们对极致交互体验的需求时,你很可能会发现必须重构甚至重写整个应用。

正是看到了这一痛点,fast.ai 的创始人 Jeremy Howard 带着 FastHTML 登场,试图向所有 Python 开发者证明:我们不必在“简单易用”和“强大灵活”之间做单选题,完全可以两者兼得。

不妥协的 FastHTML

Streamlit 的极致简单,某种程度上是以牺牲灵活性与性能为代价的。其构建的应用界面难免有“千人一面”之感,且某些复杂交互场景难以实现,性能方面也存在瓶颈。

FastHTML 则完全不同,这得益于它构建于两个非常出色的底层框架之上:StarletteHTMX

Starlette 是一个基于 ASGI 协议的轻量级 Python Web 框架,也是当下大热的 FastAPI 的核心基石。简单来说:

  • FastAPI = Starlette + Pydantic(数据验证)+ OpenAPI(自动文档)
  • FastHTML = Starlette + HTMX + Python 组件系统

它利用 Starlette 保证了后端的高性能,引入 HTMX 解决了无需编写 JavaScript 即可实现前端交互的难题,并将 HTML 标签封装为 Python 对象,让开发者能以纯 Python 的方式构建现代 Web 应用。

对于多数 Python 开发者,Starlette 已是老熟人,它以高性能和稳定性著称,这里不再赘述。

真正赋予 FastHTML “点石成金”魔力的,是 HTMX

魔法的核心:HTMX

如果你是一位典型的后端开发者,很可能对前端的复杂性深恶痛绝:为了让一个按钮点击后更新页面的某一部分,你不得不引入 React 或 Vue,配置复杂的构建工具,并编写前后端分离的 API 进行联调。

HTMX 的出现,就是为了终结这场噩梦。它允许你直接在 HTML 标签中使用特殊属性来声明现代化的交互行为。

例如,传统 HTML 只能通过 <a><form> 标签发起请求。而 HTMX 允许任何元素(如 <div>, <button>)发起各种 HTTP 请求(GET, POST, PUT, DELETE),并可以直接使用服务器返回的 HTML 片段来替换页面上的特定部分。

这意味着,你不再需要编写 JavaScript 来处理前后端通信和 DOM 更新。所有的交互逻辑,都回到了你最熟悉、最可控的 Python 后端。

这正是 FastHTML 的精髓。它利用 Python 强大的表达力,将 HTML 标签封装为一个个 Python 对象(组件)。代码运行时,这些对象被“渲染”成带有 HTMX 属性的标准 HTML。因此,你可以用纯 Python 代码,轻松定义出能够局部刷新的动态页面组件。

相比之下,Streamlit 的设计哲学是“一旦有交互,就重跑整个脚本”。这种机制虽然简单直观,但在处理复杂交互或需要保持状态的场景下显得笨重且低效。尽管 Streamlit 在 1.37.0 版本(2024年中)推出了 st.fragment 装饰器来尝试实现局部刷新,但相比于 FastHTML 从底层就基于“组件化”和“局部交换”的设计,前者更像是一个功能补丁,而后者则是原生的高性能解决方案。

炙手可热的新星

这种“回归简单、专注核心逻辑”的理念,正在席卷整个开发界。

  • HTMX:它已是前端领域的“当红炸子鸡”。在2024年的 JavaScript Rising Stars 评选中,HTMX 的 GitHub Star 增长数甚至超过了 React 和 Vue,目前总星标数已突破 44k。它代表了一种深刻的行业反思:我们或许并不总是需要那些极其复杂的重型 前端框架
  • FastHTML:作为 Python 界与 HTMX 协同的最佳拍档,它虽然在 2024年8月 才首次发布,但凭借 Jeremy Howard 的号召力及其直击痛点的设计,短短几个月内在 GitHub 上就斩获了超过 6.6k stars(截至2026年初数据)。

这不仅是两个库的简单结合,更是一场“去复杂化”的开发者运动。FastHTML 同时做到了化繁为简与标新立异。

FastHTML 快速上手

FastHTML 的设计哲学强调“显式优于隐式”,同时保持极致的简洁。你不需要配置繁琐的路由表、设置模板目录,甚至可以不手动启动服务器(如果使用 serve() 函数)。

1. Hello, World!

让我们从一个最小的 FastHTML 应用开始:

from fasthtml.common import *

app, rt = fast_app()

@rt("/")
def get():
    return Titled(
        "FastHTML Demo", Div(H1("Hello, World!"), P("这是我的第一个 FastHTML 应用"))
    )

serve()

运行这段代码,一个完整的 Web 服务器就会启动。这里有几个关键点:

  • fast_app():初始化应用,返回应用对象 app 和路由装饰器 rt
  • Python 组件Div, H1, P 都是 Python 类。你不再需要手写 <p>...</p> 这样的标签字符串,而是像搭积木一样用 Python 对象构建页面结构。这不仅避免了拼写错误,还能充分利用 IDE 的代码自动补全和类型提示。

2. 添加交互 (HTMX)

上面的页面是静态的。现在让我们添加一点“魔法”,创建一个无需任何 JavaScript 的计数器:

from fasthtml.common import *

count = 0

app, rt = fast_app()

@rt("/")
def get():
    return Titled(
        "计数器",
        Div(
            H1(f"当前计数: {count}"),
            # 点击按钮时,向 /increment 发送 POST 请求
            # 并将返回的内容替换掉 id 为 'counter' 的元素
            Button(
                "点我 +1",
                hx_post="/increment",
                hx_target="#counter",
                hx_swap="innerHTML",
            ),
            id="counter",
        ),
    )

@rt("/increment")
def post():
    global count
    count += 1
    # 只返回需要更新的那部分 HTML
    return Div(
        H1(f"当前计数: {count}"),
        Button("点我 +1", hx_post="/increment", hx_target="#counter", hx_swap="innerHTML"),
    )

serve()

在这个例子中,我们通过 HTMX 属性声明了交互行为:

  1. hx_post="/increment":告诉浏览器,点击此按钮时向 /increment 路径发送 POST 请求。
  2. hx_target="#counter":指定服务器响应返回后,要更新页面上 id="counter" 的元素。
  3. hx_swap="innerHTML":定义更新方式为替换目标元素的内部 HTML。

使用 FastHTML 与 HTMX 实现的无刷新计数器应用

整个过程没有编写一行 JavaScript,代码不可思议地简洁,但带给用户的却是无刷新、流畅的单页应用(SPA)级体验。

Jeremy 的“个人印记”

如果你了解 Jeremy Howard,就会发现 FastHTML 的每个设计细节都深深烙上了他的个人哲学:实用主义探索式编程

1. 像数据分析一样写 Web (nbdev 基因)

Jeremy 是 Jupyter Notebook 的狂热信徒,他甚至开发了 nbdev 系统,倡导直接在 Notebook 中开发生产级代码。他认为,编程不应是“盲写代码 -> 启动服务 -> 刷新浏览器”的枯燥循环,而应是实时交互与获得反馈的探索过程。

FastHTML 完美继承了这一基因。你可以直接在 Jupyter Notebook 的单元格中定义路由、编写组件,然后调用 serve()。应用会直接在 Notebook 的输出区域运行,并支持热重载。这意味着,Web 开发终于可以像数据分析一样:写一行,看结果。对于习惯了 REPL 交互式环境的 Python 开发者而言,这种“探索式编程”的流畅体验极具吸引力。

2. 为 AI 时代而生 (AI-First)

作为顶级 AI 专家,Jeremy 比任何人都清楚:在 2024 年及以后,如果一个新框架不能被 AI 熟练掌握,它就可能没有未来。

由于 FastHTML 太新,主流大语言模型(如 ChatGPT)对其知之甚少。Jeremy 没有被动等待模型训练更新,而是主动出击。他制定了 llms.txt 标准,并为 FastHTML 提供了专门的“AI 知识胶囊”文件:/llms-ctx.txt

这体现了他一贯的务实风格:不仅要让人用起来顺手,还要让 AI 也能轻松理解。 你只需将这个文件提供给 Cursor 或 Claude 等 AI 编程助手,它们就能快速掌握 FastHTML 的核心概念与用法。这种“AI 原生”的文档设计思路,很可能成为未来开源项目的标准配置。

关于美学?

这是一个非常现实的问题。长期以来,Python 开发者构建的 Web 应用(例如早期的 Streamlit 或 Gradio 应用)常带有一种“功能先行”的粗犷感,难以达到商业级应用的视觉精致度。

FastHTML 在这方面做了两手准备:

下限很高(Pico CSS):默认情况下,FastHTML 会自动启用 Pico CSS。这是一个极简的 CSS 框架,无需你编写任何 CSS 类名,就能让标准的 HTML 元素(按钮、表单、表格等)拥有现代、干净的外观,并且自动支持深色模式。这意味着,即使你对 CSS 一窍不通,构建出的应用界面也是整洁、体面的。

上限无限(兼容所有 CSS):如果你对 UI 有极致追求,FastHTML 生成的是标准 HTML,因此可以无缝兼容整个 CSS 生态。你可以直接引入 Tailwind CSS(目前最流行的原子化 CSS 框架)来精细控制每一个像素,也可以使用任何第三方 UI 库或自定义样式表,自由度毫无限制。

结语:让技术回归服务

FastHTML 的官网是 fastht.ml,你可以在上面找到更丰富的示例和完整文档。

至此,我们的 “2026 量化新基建” 系列已经介绍了三块核心拼图:

  1. uv & Pydantic:用极速的包管理和严格的数据验证,夯实了工程地基
  2. SQLite (WAL):用无需运维的高性能单文件数据库,解决了数据存储的痛点。
  3. FastHTML:用纯 Python 的现代 Web 框架,打通了交互与展示的最后一公里。

这一系列技术选型的共同灵魂是:反内卷,重实效。它们不追求大而全的“企业级”复杂架构,而是致力于让个人开发者和小型团队能以最小的认知负担,构建出高性能、高可用的专业系统。

在 2026 年,技术的目标应该是降低门槛、提升效率,而非筑高壁垒。希望这套“新基建”能帮助你从繁琐的基础设施工作中解放出来,将最宝贵的精力,专注投入到核心的 Alpha 策略挖掘中去。欢迎在 云栈社区 交流更多关于现代开发栈的实践与思考。




上一篇:企业网络专线分类详解:Internet、二层、MPLS、国际专线及SD-WAN选型指南
下一篇:DeepSeek V4即将发布?网传主打编程能力,参数规模达万亿级
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-14 17:10 , Processed in 0.207850 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表