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

news/2026/1/25 23:04:31/文章来源:https://www.cnblogs.com/honhe/p/19530714

“速度超越光速,美如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.mzph.cn/news/1216041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode刷题】随机链表的复制

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 n…

【LeetCode刷题】排序链表

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。示例 1:输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2:输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3:输入&…

LLMs之SkillScan:《Agent Skills in the Wild: An Empirical Study of Security Vulnerabilities at Scale》翻译

LLMs之SkillScan:《Agent Skills in the Wild: An Empirical Study of Security Vulnerabilities at Scale》翻译与解读 导读:本文首次以规模化、经验证的方法系统审视了代理技能生态中的安全风险:通过采集 >42k 技能并分析 31k&#xff0…

Jakarta NoSQL Template 核心特性与应用实践之一

1. Jakarta NoSQL Template 概述 1.1 Jakarta NoSQL 项目简介 标准化NoSQL访问:为Java开发者提供统一的NoSQL数据库访问API 多模型支持:支持文档、列式、键值、图形等多种NoSQL数据模型 轻量级框架:基于注解驱动的编程模型,简化开发 1.2 Template 模块的核心作用 模板模式…

探讨大数据领域存算分离的未来趋势

探讨大数据领域存算分离的未来趋势 关键词:存算分离、大数据架构、分布式存储、弹性计算、云原生、资源解耦、数据湖 摘要:本文从“餐厅厨房革命”的生活案例切入,逐步解析大数据领域“存算分离”的核心逻辑。通过对比传统存算一体架构的痛点…

不仅是手速:为什么资深程序员最终都转了双拼?(附练习工具)

引言:你的输入法,可能是你效率的 O(n^2) 瓶颈 作为一个每天敲几千行代码和注释的开发者,我们习惯于优化算法复杂度,从 O(n^2) 优化到 O(n),甚至为了几十毫秒的延迟去重构架构。 但是,绝大多数人却在容忍一…

实用指南:03-gpg(证书管理 )详细范例

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

数据中台建设中的数据集成方案:CDC技术详解

数据中台建设中的数据集成方案:CDC技术详解关键词:数据中台、数据集成、CDC技术、Change Data Capture、实时数据同步摘要:本文围绕数据中台建设中的数据集成方案,深入剖析了CDC(Change Data Capture)技术。…

《把脉行业与技术趋势》-103-通信“人“解决了人与人之间通过“电“进行快速的信息交流,不受时间、空间的限制。微信、移动互联网都得益于通信技术解决了系统中任意两个节点之间快速的信息交换。

通信"人"解决了人与人之间通过"电"进行快速的信息交流,不受时间、空间的限制。微信、移动互联网、大数据、AI都得益于通信技术解决了任意一个系统中两个节点之间快速的信息交换。 然而,现实世界由人组成的系统,通信的两个…

Arcanum Music

链接: https://pan.baidu.com/s/1ZERy_k5jLFOkdDMruxdpRw 提取码: txym【楼主评价】:聚合四大平台[顶!]畅听全网歌曲【软件名称】:ArcanumMusic【软件版本】:v1.6.7【软件大小】:740m【适用平台】:Windows系统/Linux系…

电脑软件MusicDownloader

链接:https://pan.quark.cn/s/aa7f2ad44edc【软件名称】:MusicDownloader【软件版本】:v1.0.0【软件大小】:40m【测试平台】:win10 64位系统【官方介绍】:某☁️音乐下载器(Modern Music Downloader&#x…

Ceru Music 澜音

链接: https://pan.baidu.com/s/1S13IYKBZMo1Uvc2Vg54Jzg 提取码: bpds楼主评价】:畅听全网[顶!]支持无损下载[顶!]附带音源【软件名称】:Ceru Music 澜音【软件版本】:v1.7.11【软件大小】:1.86G【适用平台】:Windows…

Qwen3-TTS 1.7B 离线整合包

链接:https://pan.quark.cn/s/e4e555e2af9bQwen3-TTS(Text To Speech) 是由 Qwen 开发的一系列功能强大的语音生成,全面支持音色克隆、音色创造、超高质量拟人化语音生成,以及基于自然语言描述的语音控制。直接将开源T…

Linux Bench | 综合性Linux服务器性能测试与网络质量检测脚本

链接:https://pan.quark.cn/s/d6f1d0059b21集成了业界主流的测试工具,提供一键式的硬件性能评估、网络连通性测试及流媒体服务解锁检测

AI Agent开发实践:关键步骤和最佳实践

AI Agent开发实践:关键步骤和最佳实践 关键词:AI Agent、开发实践、关键步骤、最佳实践、人工智能 摘要:本文围绕AI Agent开发实践展开,深入探讨其关键步骤和最佳实践。首先介绍了AI Agent开发的背景,包括目的、预期读者、文档结构和相关术语。接着阐述了AI Agent的核心概…

OneDocs | 文档分析

链接:https://pan.quark.cn/s/fdf021c6ec55支持平台:#Windows #macOS #Linux一款智能文档分析工具,可以快速提取和理解文档中的关键信息。支持多种常见文档格式,包括PDF、Word、PPT、Excel和TXT,最大支持50MB的文件大小…

DP Animation Maker(动画制作工具)

链接:https://pan.quark.cn/s/adccc0075a4cDP Animation Maker是一款动画制作工具,可以帮助用户创建动画背景,提供了众多动画特效,即使是小白用户也可以很好的制作出动画。软件特色动画视频。网页横幅。视频。数字贺卡。手机背景。…

最优化理论综述

最优化理论是数学中的一个重要分支,主要研究如何在给定约束下找到目标函数的最优解(最小值或最大值)。它广泛应用于工程、经济学、机器学习等领域。以下从数学基础、优化建模、线性规划方法等方面详细总结文档内容,…

震撼上线!大数据领域Zookeeper的故障处理实战

大数据运维必看:Zookeeper故障处理实战手册——从排查到恢复的全流程解析 副标题:覆盖节点宕机、脑裂、数据不一致等10常见故障,帮你把停机时间从小时级缩到分钟级 摘要/引言 在大数据集群中,Zookeeper是当之无愧的“分布式协调…

【车牌识别】基于计算机视觉的多雾环境停车计费系统附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f34…