🚀 为什么我们需要 Violit?
在 Python 数据可视化和 AI Demo 领域,Streamlit 无疑是目前的霸主。但随着项目复杂度的提升,开发者们往往会遇到一个令人头疼的瓶颈:“Full-Script Rerun(全脚本重新运行)”。
每当用户点击一个按钮,整个 Python 脚本就要从头到尾执行一遍。这种机制导致了:
- 性能低下: 随着逻辑变多,页面加载圈圈转个不停。
- 状态丢失: 复杂的交互逻辑难以维护。
- 样式死板: 自定义 UI 极具挑战。
为了解决这些痛点,我开发了 Violit —— 一个既保留了 Streamlit 直观语法,又实现了 React 级细粒度响应式(Fine-grained Reactivity) 的开源框架。
✨ Violit 的核心优势
- 无感更新 (No Full Rerun): 不再重新加载整个页面。只有状态(State)发生变化的组件才会进行精准更新,速度极快。
- 零学习成本 (Zero Learning Curve): 如果你用过 Streamlit,你可以在 10 分钟内无缝上手 Violit。
- 开箱即用的高颜值 (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 Points | Streamlit Rendering | Violit Rendering |
|---|---|---|
| 100K | ~62ms | ~14ms |
| 500K | ~174ms | ~20ms |
| 1M | ~307ms | ~24ms |
如你所见,由于跳过了沉重的 Rerun 循环,Violit 即使在处理百万级数据时也能保持毫秒级的响应。
🌈 写在最后
Violit 的目标不仅仅是做一个 Streamlit 的替代品,而是让 Python 开发者能够真正构建出生产级别 (Production-ready) 的 Web 服务。
目前项目处于快速迭代阶段 (v0.1.12),官方网站和文档也是完全使用 Violit 构建的:
- GitHub (求 Star ⭐) : github.com/violit-dev/…
- Official Docs : violit.cloud/
欢迎大家试用并提出宝贵的建议!如果你喜欢这个项目,欢迎在 GitHub 上点个 Star 支持一下!💜