我构建了一个 Streamlit 替代品,因为我讨厌“Full‑Script Reruns”(推出 Violit) 🚀
Source: Dev.to

👋 嗨,我是一名热爱 Python 的开发者。
我是一名在行业工作的软件工程师,业余时间(晚上和周末)一直在为这个开源项目埋头苦干。
个人而言,我非常喜欢 Streamlit。它直观的语法堪称颠覆性,许多从事 AI/数据研究的朋友每天都用它来做原型。
但随着项目规模的扩大,我发现它们受到一种结构性性能问题的困扰:“完整脚本重新运行”。
每当你点击按钮时,整个 Python 脚本都会从头到尾重新执行。看到加载指示器不停旋转(或应用崩溃),让我作为开发者迫切想要解决这个问题。
我曾尝试推荐 NiceGUI 作为替代方案。它确实不错,但反馈始终如一:
“语法与 Streamlit 差别太大。”
“自定义设计(Material Design)太困难。”
于是,我决定自己动手。
“如果我能构建一个像 Streamlit 那么易用、但像 React 那么快速的工具会怎样?”
Violit 就这样诞生了。
💜 Violit 背后的哲学
Violit 基于 FastAPI 和 Shoelace (Web Components) 构建。我的架构目标很明确:
- 细粒度响应式: 当数据变化时,仅更新特定组件。无需整页重新运行。
- 零学习曲线: 如果你会使用 Streamlit,应该能在 10 分钟内上手 Violit。
- 默认美观: 你不需要了解 CSS 就能让界面好看。只需设置
theme="cyberpunk"。
🔥 展示代码
Violit 继承了 Streamlit 的开发者体验。您无需了解复杂的 callbacks 或 useEffect。您的 Python 代码流程即成为 UI。
import violit as vl
app = vl.App(title="Violit Demo")
# State declaration (similar to React's useState or SolidJS signals)
count = app.state(0)
# Clicking the button updates ONLY the `count` variable.
# No full script rerun happens.
app.button("Increment", on_click=lambda: count.set(count.value + 1))
# When `count` changes, only this text component updates.
app.text("Current Count:", count)
app.run()
进入全屏模式 退出全屏模式
⚡ 基准测试:Streamlit vs. Violit
因为 Violit 使用 细粒度响应式,当状态变化时,它不需要重新读取数据或重新渲染整个 DOM。
大型数据集的渲染速度
| 数据点 | Streamlit 渲染 | Violit 渲染 |
|---|---|---|
| 100 K | ~62 ms | ~14 ms |
| 500 K | ~174 ms | ~20 ms |
| 1 M | ~307 ms | ~24 ms |


正如您所见,即使在大型数据集下,Violit 也几乎没有性能下降,因为它绕过了繁重的重新运行循环。
初始图表加载速度(500 万数据点)
下面的比较展示了使用 500 万生成数据点绘制图表的渲染情况(上:Streamlit,下:Violit)。

与 Streamlit 相比,Violit 显示出显著更快的应用启动速度。
🎨 20+ 主题,只需一行代码
“美学是一种特性。”
Violit 附带超过 20 种预设主题,涵盖 bootstrap、cyberpunk 与 vaporwave 等风格。
主题示例
Bootstrap

Dracula

手绘

您可以仅通过一个参数切换整个应用的外观,例如:
app = vl.App(title="My App", theme="cyberpunk")
🌐 “我用 Violit 构建了 Violit 网站…”
说得容易。为了证明 Violit 已经可以投入生产(MVP),我 完全使用 Violit 构建了官方着陆页和文档。
- 着陆页: violit.cloud(使用 Violit 构建 👈)
- 文档: doc.violit.cloud(使用 Violit 构建 👈)
它支持 混合渲染(大流量使用 HTMX,实时交互使用 WebSocket),甚至可以通过 pywebview 实现 桌面模式。
Violit 的目标不仅仅是另一个 Streamlit 替代品。我们的愿景是让开发者能够 完全用 Python 构建完整的 Web 服务(MVP)。
🙏 试试看吧!
我正在公开开发中,当前版本为 v0.1.11。虽然仍处于早期阶段,但来自 Reddit 和社区的反馈非常惊喜。
如果你在寻找比 Streamlit 更快的仪表盘或 AI 演示替代方案,请尝试一下并告诉我你的感受!
- GitHub: github.com/violit-dev/violit(星星让我开心!⭐)
- 用 Violit 在 10 分钟内搭建自己的博客!: Violit 博客示例
感谢阅读!祝编码愉快。 💜
