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

相关文章
|
18天前
|
人工智能 前端开发 开发者
这几个开源项目太火啦,抓紧收藏哟起来!!!
KnowNote:本地优先AI知识库桌面应用,无需Docker,私有化部署;Remotion:用React编程生成MP4视频的开源框架;Superpowers:为AI编程助手赋能的Agentic技能框架。三者均开源,各具创新特色!
163 11
|
19天前
|
存储 人工智能 达摩院
深度实战:在 GPU 环境下一键部署 Jimeng 中文文生图交互系统
这是一篇专为中文文生图模型Jimeng(积木/积梦)打造的实战部署指南,详解环境配置、硬核修复huggingface_hub版本冲突,并提供健壮测试与交互式脚本,助你零踩坑运行东方美学AI绘图。
200 12
|
19天前
|
机器学习/深度学习 人工智能 计算机视觉
YOLO26改进 - 注意力机制 | 多扩张通道细化器MDCR 通过通道划分与异构扩张卷积提升小目标定位能力
本文介绍了一种在YOLO26目标检测模型中引入高效解码器模块EMCAD的创新方法,以提升模型在资源受限场景下的性能与效率。EMCAD由多个模块构成,其中核心的EUCB(高效上卷积块)通过上采样、深度可分离卷积、激活归一化和通道调整等操作,兼顾了特征质量与计算成本。实验结果显示,该模块在显著减少参数与FLOPs的同时仍具备优异性能。文章还提供了完整的YOLO26模型集成流程、配置和训练实战。
YOLO26改进 - 注意力机制 | 多扩张通道细化器MDCR 通过通道划分与异构扩张卷积提升小目标定位能力
|
18天前
|
关系型数据库 项目管理 数据安全/隐私保护
Leantime:开源项目管理神器
Leantime是一款专为非专业项目经理设计的开源项目管理工具,在Jira的臃肿和Trello的简化之间找到了完美平衡。它集成了战略规划、敏捷看板、甘特图、知识管理、工时跟踪等全面功能,支持Docker一键部署。无论是创业团队还是企业部门,Leantime都能以极低的学习成本,让每位成员轻松参与项目协作。告别过度复杂的工具,用这款轻量而强大的神器,为你的2026年项目计划保驾护航。
131 16
 Leantime:开源项目管理神器
|
20天前
|
人工智能 弹性计算 对象存储
玄晶引擎:基于阿里云生态的全流程AI自动化方案,赋能中小微企业低成本数字化转型
玄晶引擎是阿里云生态原生AI自动化平台,专为中小微企业设计。依托通义千问、ACK、OSS、VectorDB等服务,实现“内容生产—流量分发—精准获客—成交转化”全流程闭环。云原生架构+零代码操作,算力成本降60%,人力节省超60%,3个月可回本。
127 15
|
19天前
|
机器学习/深度学习 计算机视觉 网络架构
YOLO26改进 - 注意力机制 |融合HCF-Net维度感知选择性整合模块DASI 增强小目标显著性
本文介绍将HCF-Net中的维度感知选择性融合(DASI)模块集成至YOLO26检测头,通过通道分区与Sigmoid自适应加权,融合高/低维及当前层特征,显著提升红外小目标检测精度,在SIRST数据集上超越主流方法。(239字)
|
20天前
|
数据采集 人工智能 自动驾驶
烦透了AI焦虑?读懂智源2026报告,抓住3个真机会
写完这篇文章我思考了很久,当AI越来越强大,我们作为人类到底还有什么独特的价值? 我的答案是:不是计算能力,而是意义创造。
|
21天前
|
人工智能 PyTorch 算法框架/工具
在无网络与8G内存约束下,个人计算机部署AI实践
本文探讨在无网络、仅8GB内存、无GPU的老旧PC上本地部署大语言模型的实践路径。通过构建纯净Python环境、选用PyTorch格式小模型(Qwen1.5-0.5B)、规避系统陷阱(如长路径限制、注册表关联错误等),成功实现离线中文对话,形成可复现的避坑指南与技术参考。(239字)
|
19天前
|
人工智能 开发框架 IDE
AI 时代的量化革命:10分钟开发你的第一个交易策略
本文手把手教你用AI工具10分钟开发首个量化交易策略:从克隆SDK、启动AI IDE,到生成KDJ_RSI组合策略、配置运行环境并实盘验证。零基础也能快速上手,开启AI驱动的量化投资新范式!
219 17
|
20天前
|
人工智能 监控 架构师
AI Agent 搭建师进阶指南:破解浮光行为陷阱,构建业务闭环价值
本文揭示AI智能体“浮光行为”这一隐性风险:仅机械执行表层指令,缺乏目标理解、状态记忆与自我修正能力。提出AI Agent搭建师三阶成长路径——从工具整合者,到流程架构师,再到行业专家,并给出构建业务闭环、沉淀底层逻辑、实现人机协同的工程破局方法。(239字)
111 9