当前位置: 首页 > news >正文

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

“速度超越光速,美如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 框架

FrameworkArchitectureLearning CurvePerformanceDesktop AppReal-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

http://www.jsqmd.com/news/299831/

相关文章:

  • 【LeetCode刷题】随机链表的复制
  • 【LeetCode刷题】排序链表
  • LLMs之SkillScan:《Agent Skills in the Wild: An Empirical Study of Security Vulnerabilities at Scale》翻译
  • Jakarta NoSQL Template 核心特性与应用实践之一
  • 探讨大数据领域存算分离的未来趋势
  • 不仅是手速:为什么资深程序员最终都转了双拼?(附练习工具)
  • 实用指南:03-gpg(证书管理 )详细范例
  • 数据中台建设中的数据集成方案:CDC技术详解
  • 《把脉行业与技术趋势》-103-通信“人“解决了人与人之间通过“电“进行快速的信息交流,不受时间、空间的限制。微信、移动互联网都得益于通信技术解决了系统中任意两个节点之间快速的信息交换。
  • Arcanum Music
  • 电脑软件MusicDownloader
  • Ceru Music 澜音
  • Qwen3-TTS 1.7B 离线整合包
  • Linux Bench | 综合性Linux服务器性能测试与网络质量检测脚本
  • AI Agent开发实践:关键步骤和最佳实践
  • OneDocs | 文档分析
  • DP Animation Maker(动画制作工具)
  • 最优化理论综述
  • 震撼上线!大数据领域Zookeeper的故障处理实战
  • 【车牌识别】基于计算机视觉的多雾环境停车计费系统附Matlab代码
  • Java毕设选题推荐:基于springboot的房产交易系统基于java+springboot+vue的房产销售系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 计算机Java毕设实战-基于springboot的房产交易系统二手房交易和交流平台管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 【课程设计/毕业设计】基于java+springboot+vue的房产销售系统基于springboot的房产交易系统【附源码、数据库、万字文档】
  • Java计算机毕设之基于springboot的房地产销售管理系统基于springboot的房产交易系统(完整前后端代码+说明文档+LW,调试定制等)
  • 飞牛影视配置独立端口号,不与飞牛公用web端口
  • 个人学习26.1.25 前端 HTML语言
  • 深入探讨大数据领域Spark的数据倾斜问题及解决方案
  • 【图像加密】基于DWT和SPIHT的联合图像压缩和加密技术附matlab代码
  • 【心电信号ECG】基于LMS LLMS NLMS混合母心跳信号ECG中提取胎儿心跳附Matlab代码和报告
  • 【车辆】基于simulink的车辆的热管理系统附matlab代码