Violit: Streamlit杀手,无需全局刷新,构建AI快捷面板

简介: Violit 是新一代 Python Web 框架,融合 Streamlit 的简洁语法与 React 的响应式性能。首创 O(1) 信号状态架构,零重运行、无需 `@cache`/`key`/回调,支持桌面原生应用与 30+ 主题,开箱即用、极速如光。

“速度超越光速,美如Violit。” Streamlit 的结构 × React 的性能

Violit 是一个新一代 Python Web 框架,它采用 O(1) 状态架构以实现即时响应,这与 Streamlit 的完全脚本重运行结构不同。

构建响应速度如光速、语法最优雅的应用程序。

为什么是Violit?

架构差异

Violit 和 Streamlit 的相似之处在于它们都使用 Python 代码构建用户界面,但它们的内部机制从根本上来说是不同的。

特征 Streamlit(传统) Violit(响应式)
执行模型 完全重运行 (O(N)),每次用户交互时重新运行整个脚本。 零重新运行 (O(1)),仅更新与已修改状态相连的组件。
表现 随着数据量的增加,响应速度可能会降低。 无论数据规模如何,都能保持一致的反应速度。
优化 需要像 @cache 、 @fragment 这样的优化装饰器。 设计上已进行优化,无需额外的优化代码。
部署 针对网页浏览器执行进行了优化。 同时支持网页浏览器模式和桌面原生应用模式。
设计 专注于提供基本用户界面。 提供 30 多个专业主题的即用型设计。

主要特点

  1. 通过设计进行优化(类似 Streamlit 的语法,无复杂性) :保留了 Streamlit 直观的语法,但在架构层面上移除了复杂的优化工具。

    • 无需 @cache_data@fragmentst.rerun :由于 O(1) 结构,无需手动优化。
    • 无需 key 管理 :无需手动指定小部件状态管理的唯一键。
    • 无需复杂的回调函数 :无需像 Dash 或 Panel 那样定义复杂的回调函数/类。
  2. 超快速度 :即使以 0.1 秒的增量移动滑块,图表也能实时反应,不会出现卡顿。

  3. 混合运行时

    • WebSocket 模式 :超低延迟双向通信(默认)
    • 精简模式 :基于 HTTP,有利于处理大规模并发连接
  4. 桌面模式 :无需 Electron 即可使用 --native 选项作为完美的桌面应用程序运行。

主题画廊

你完全不需要懂 CSS。Violit 提供了超过 30 个主题。(不久之后,用户将能够轻松添加自定义主题。)

# Configuration at initialization
app = vl.App(theme='cyberpunk')

# Runtime change
app.set_theme('ocean')
主题家族 示例
黑暗 dark 、 dracula 、 monokai 、 ocean 、 forest 、 sunset
阳光 light 、 pastel 、 retro 、 nord 、 soft_neu
科技 cyberpunk 、 terminal 、 cyber_hud 、 blueprint
专业 editorial 、 bootstrap 、 ant 、 material 、 lg_innotek

基准测试与性能

基准测试结果表明,Violit 的 O(1) 更新方法与现有的 O(N) 方法相比效率更高。

对比

Python UI 框架

Framework Architecture Learning Curve Performance Desktop App Real-time
Streamlit Full Rerun Very Easy Slow
Dash Callback Medium Fast
Panel Param Hard Fast
Reflex React (Compile) Hard Fast
NiceGUI Vue Easy Fast
Violit Signal Very Easy Fast

代码比较

1. 与 Streamlit 对比 (Rerun 与 Signal)

Streamlit 在按钮点击时会重新执行整个脚本 ,但 Violit 只会执行该函数

# Streamlit
import streamlit as st

if "count" not in st.session_state:
    st.session_state.count = 0

if st.button("Click"):
    st.session_state.count += 1 # Rerun triggers here

st.write(st.session_state.count)
# Violit
import violit as vl
app = vl.App()

count = app.state(0)

# Update only count on click (No Rerun)
app.button("Click", on_click=lambda: count.set(count.value + 1))
app.write(count)

2. vs Dash (回调地狱 vs 自动响应)

Dash 需要复杂的回调函数来连接输入/输出,但 Violit 只需要一个状态

# Dash
from dash import Dash, html, Input, Output, callback

app = Dash(__name__)
app.layout = html.Div([
    html.Button("Click", id="btn"),
    html.Div(id="out")
])

@callback(Output("out", "children"), Input("btn", "n_clicks"))
def update(n):
    return f"Value: {n}" if n else "Value: 0"
# Violit
count = app.state(0)

app.button("Click", on_click=lambda: count.set(count.value + 1))
# Automatic state dependency tracking -> No Callback needed
app.write(lambda: f"Value: {count.value}")

3. 与 NiceGUI 的比较 (绑定 vs 直接状态)

NiceGUI 也很棒,但 Violit 提供了类似 Streamlit 的更简洁的语法

# NiceGUI
from nicegui import ui

count = {
   'val': 0}
ui.button('Click', on_click=lambda: count.update(val=count['val'] + 1))
ui.label().bind_text_from(count, 'val', backward=lambda x: f'Value: {x}')
# Violit
count = app.state(0)
app.button('Click', on_click=lambda: count.set(count.value + 1))
app.write(count) # No need for complex connections like .bind_text

4. 与 Reflex 的对比 (类编译 vs 纯 Python)

Reflex 需要定义编译 State 类,但 Violit 是一个纯 Python 脚本。

# Reflex
import reflex as rx

class State(rx.State):
    count: int = 0
    def increment(self):
        self.count += 1

def index():
    return rx.vstack(
        rx.button("Click", on_click=State.increment),
        rx.text(State.count)
    )
# Violit
# No class definition needed, no compilation needed
count = app.state(0)
app.button("Click", on_click=lambda: count.set(count.value + 1))
app.write(count)

快速入门

1. 安装

可安装在 Python 3.10+ 环境中。

pip install violit

# Or development version
pip install git+https://github.com/violit-dev/violit.git

2. 你好,Violit!

创建一个名为 hello.py 文件。

import violit as vl

app = vl.App(title="Hello Violit", theme='ocean')

app.title("Hello, Violit!")
app.markdown("Experience the speed of **Zero Rerun**.")

count = app.state(0)

col1, col2 = app.columns(2)
with col1:
    app.button("➕ Plus", on_click=lambda: count.set(count.value + 1))
with col2:
    app.button("➖ Minus", on_click=lambda: count.set(count.value - 1))

app.metric("Current Count", count)

app.run()

3. 执行

# Basic run (WebSocket Mode)
python hello.py

# Desktop App Mode (Recommended)
python hello.py --native

# Port configuration
python hello.py --port 8020

小部件支持

Violit 支持 Streamlit 核心组件,并且一些功能经过重新设计,效率更高。

有关详细的兼容性列表和不支持的小部件信息,请参阅 Streamlit API 支持矩阵文档。

技术栈

  • 后端 :FastAPI(异步 Python)
  • 前端 :Web Components(Shoelace)、Plotly.js、AG-Grid
  • 协议 :WebSocket 和 HTTP/HTMX 混合协议
  • 状态 :基于信号的反应式

路线图

Violit是不断演变的。

  • 核心 :信号状态引擎、主题系统
  • 小部件 :Plotly、数据框、输入小部件
  • 主页 :官方主页可打开
  • 文档 :官方技术文档和 API 参考更新
  • 自定义组件 :用户自定义组件支持
  • 自定义主题 :支持用户自定义主题
  • async :支持异步处理
  • 更多示例 :提供更多实际可用的示例代码
  • Violit.Cloud :云部署服务
  • 扩展 :集成更多第三方库

📂 项目结构

.
├── violit/            # Framework source code
│   ├── app.py         # Main App class and entry point
│   ├── broadcast.py   # Real-time WebSocket broadcasting
│   ├── state.py       # Reactive State Engine
│   ├── theme.py       # Theme management
│   ├── assets/        # Built-in static files
│   └── widgets/       # Widget implementations
│       ├── input_widgets.py
│       ├── data_widgets.py
│       ├── layout_widgets.py
│       └── ...
└── requirements.txt   # Dependency list

https://github.com/violit-dev/violit

https://mp.weixin.qq.com/s/i5F9fwsV9IptbHiCT7wpWg

目录
相关文章
|
14小时前
|
存储 弹性计算 关系型数据库
阿里云中小企业扶持权益中心内容说明及节省上云操作手册参考
本文将以技术视角,结合最新权益细则,用通俗语言全面拆解权益中心的核心内容、适用场景、申请步骤和实操技巧,还整理了不同规模企业的高性价比组合方案,帮助你避开误区,用合理成本实现稳定上云。全文无营销话术,所有内容基于实测体验和官方规则整理,可直接作为上云操作手册参考。
27 1
|
10天前
|
数据采集 人工智能 IDE
告别碎片化日志:一套方案采集所有主流 AI 编程工具
本文介绍了一套基于MCP架构的轻量化、多AI工具代码采集方案,支持CLI、IDE等多类工具,实现用户无感、可扩展的数据采集,已对接Aone日志平台,助力AI代码采纳率分析与研发效能提升。
300 37
告别碎片化日志:一套方案采集所有主流 AI 编程工具
|
17天前
|
SQL 人工智能 分布式计算
从工单、文档到结构化知识库:一套可复用的 Agent 知识采集方案
我们构建了一套“自动提取 → 智能泛化 → 增量更新 → 向量化同步”的全链路自动化 pipeline,将 Agent 知识库建设中的收集、提质与维护难题转化为简单易用的 Python 工具,让知识高效、持续、低门槛地赋能智能体。
229 36
|
10天前
|
存储 缓存 数据建模
StarRocks + Paimon: 构建 Lakehouse Native 数据引擎
12月10日,Streaming Lakehouse Meetup Online EP.2重磅回归,聚焦StarRocks与Apache Paimon深度集成,探讨Lakehouse Native数据引擎的构建。活动涵盖架构统一、多源联邦分析、性能优化及可观测性提升,助力企业打造高效实时湖仓一体平台。
194 35
|
11天前
|
人工智能 运维 监控
进阶指南:BrowserUse + AgentRun Sandbox 最佳实践
本文将深入讲解 BrowserUse 框架集成、提供类 Manus Agent 的代码示例、Sandbox 高级生命周期管理、性能优化与生产部署策略。涵盖连接池设计、安全控制、可观测性建设及成本优化方案,助力构建高效、稳定、可扩展的 AI 浏览器自动化系统。
275 30
|
19天前
|
Kubernetes 应用服务中间件 API
应对 Nginx Ingress 退役,是时候理清这些易混淆的概念了
本文希望提供一种更简单的方式,来理解这些容易混淆的技术概念:Nginx、Ingress、Ingress Controller、Ingress API、Nginx Ingress、Higress、Gateway API。
518 62
|
10天前
|
SQL 人工智能 Java
告别传统 Text-to-SQL:基于 Spring AI Alibaba 的数据分析智能体 DataAgent 深度解析
DataAgent是基于Spring AI Alibaba生态构建的企业级AI数据分析师,融合NL2SQL、多智能体协作与RAG技术,支持多数据源分析、自动纠错与可视化报告生成,让业务人员零代码获取深度数据洞察。
569 34
告别传统 Text-to-SQL:基于 Spring AI Alibaba 的数据分析智能体 DataAgent 深度解析
|
12天前
|
人工智能 弹性计算 运维
探秘 AgentRun丨为什么应该把 LangChain 等框架部署到函数计算 AgentRun
阿里云函数计算 AgentRun,专为 AI Agent 打造的一站式 Serverless 基础设施。无缝集成 LangChain、AgentScope 等主流框架,零代码改造即可享受弹性伸缩、企业级沙箱、模型高可用与全链路可观测能力,助力 Agent 高效、安全、低成本地落地生产。
212 36
|
12天前
|
数据采集 监控 数据可视化
快速上手:LangChain + AgentRun 浏览器沙箱极简集成指南
AgentRun Browser Sandbox 是基于云原生函数计算的浏览器沙箱服务,为 AI Agent 提供安全、免运维的浏览器环境。通过 Serverless 架构与 CDP 协议支持,实现网页抓取、自动化操作等能力,并结合 VNC 实时可视化,助力大模型“上网”交互。
280 33
|
1天前
|
人工智能 自然语言处理 C++
写小说时,Claude 4.0 和 4.5 的差别在哪里?
本文对比Claude Sonnet 4.0与4.5在小说创作中的实际表现,聚焦人物一致性、剧情连续性与长期可控性。基于Anthropic官方能力说明及多轮实测,指出4.5在多阶段续写、逻辑连贯性与风格稳定性上显著提升,更适配中长篇连载场景,助力AI写作从“能写”迈向“能长期写”。(239字)