告别 Streamlit 的“全脚本运行”!Violit:拥有 React 性能的 Python 新一代 Web 框架

0 阅读2分钟

violit_glare.png

🚀 为什么我们需要 Violit?

在 Python 数据可视化和 AI Demo 领域,Streamlit 无疑是目前的霸主。但随着项目复杂度的提升,开发者们往往会遇到一个令人头疼的瓶颈:“Full-Script Rerun(全脚本重新运行)”

每当用户点击一个按钮,整个 Python 脚本就要从头到尾执行一遍。这种机制导致了:

  1. 性能低下: 随着逻辑变多,页面加载圈圈转个不停。
  2. 状态丢失: 复杂的交互逻辑难以维护。
  3. 样式死板: 自定义 UI 极具挑战。

为了解决这些痛点,我开发了 Violit —— 一个既保留了 Streamlit 直观语法,又实现了 React 级细粒度响应式(Fine-grained Reactivity) 的开源框架。


violit_light_jewel.png

✨ Violit 的核心优势

  1. 无感更新 (No Full Rerun): 不再重新加载整个页面。只有状态(State)发生变化的组件才会进行精准更新,速度极快。
  2. 零学习成本 (Zero Learning Curve): 如果你用过 Streamlit,你可以在 10 分钟内无缝上手 Violit。
  3. 开箱即用的高颜值 (Beautiful by Default): 内置 20+ 款精美主题(Cyberpunk, Dracula, Vaporwave 等),只需一行代码即可切换。

💻 简洁的代码示例

无需复杂的 Callbacks,也不需要了解 JavaScript。Python 的逻辑流即是 UI 流。

import violit as vl

app = vl.App(title="Violit Demo")
# 声明状态 (类似 React 的 useState)
count = app.state(0)

# 点击按钮时,只有 count 变量关联的组件会更新
# 没有任何全脚本重新运行的过程
app.button("Increment", on_click=lambda: count.set(count.value + 1))

# 当 count 变化时,仅此文本组件更新
app.text("Current Count:", count)

app.run()


📊 性能基准测试 (Benchmark)

得益于细粒度响应式机制,Violit 在处理大数据量时表现极其出色。

Data PointsStreamlit RenderingViolit Rendering
100K~62ms~14ms
500K~174ms~20ms
1M~307ms~24ms

如你所见,由于跳过了沉重的 Rerun 循环,Violit 即使在处理百万级数据时也能保持毫秒级的响应。


🌈 写在最后

Violit 的目标不仅仅是做一个 Streamlit 的替代品,而是让 Python 开发者能够真正构建出生产级别 (Production-ready) 的 Web 服务

目前项目处于快速迭代阶段 (v0.1.12),官方网站和文档也是完全使用 Violit 构建的:

欢迎大家试用并提出宝贵的建议!如果你喜欢这个项目,欢迎在 GitHub 上点个 Star 支持一下!💜