Blitz:一个轻量级、模块化、可扩展的 Web 渲染器
想象一下,一个轻量级、模块化、可扩展的 Web 渲染器,它就像是网页界的“闪电侠”,快速、灵活,而且还能和 Rust API 直接对话,这简直是技术界的超级英雄团队!
项目亮点:
Blitz:不是那种只会在雷雨天才会露面的人才,它随时待命,准备为你的 Web 应用注入活力。 前端:有两种模式,一种是 HTML/Markdown,另一种是 Dioxus,让你的应用既能展示也能互动,就像拥有了两种超能力。 构建基础:从 Stylo 到 Winit,Blitz 集合了各路英雄的力量,打造了一个强大的技术联盟。
试用指南:
克隆仓库:这不仅仅是复制代码,这是加入 Blitz 超级英雄团队的第一步! 运行示例:选择你的战场,无论是 Google 还是你自己的 URL,Blitz 都能轻松应对。 调整视图:用快捷键放大或缩小,就像调整你的超级视力,查看 Blitz 的每一个细节。
Blitz 是一个为“Dioxus Native”项目提供支持的“原生”HTML/CSS 渲染器。它本质上是一个轻量级的 Web 视图,但 JavaScript 引擎被替换成了原生的 Rust API,这使得 Rust 的响应性/状态管理库如 Dioxus 能够直接与之交互。
加入我们的讨论:Dioxus Discord[1]的#native 频道
目前它有两个前端:
一个 HTML/Markdown 前端,可以渲染 HTML 字符串。这对于预览 HTML 和/或 Markdown 文件非常有用,但目前缺乏交互性。 一个 Dioxus 前端,可以渲染 Dioxus VirtualDom。这通过 Dioxus 的事件处理支持完整的交互性。
Blitz 基于以下构建:
Stylo[2](Firefox 的并行浏览器级 CSS 引擎)用于 CSS 解析 Vello[3] + WGPU[4]用于渲染 Taffy[5]用于盒级布局 Parley[6]用于文本/行内级布局 AccessKit[7]用于可访问性 Winit[8]用于窗口和输入处理
注意:此仓库包含使用 Stylo 的新版本 Blitz。旧版本的源代码仍在legacy[9]分支上可用,但不再积极开发。
截图
Dioxus 渲染器:
HTML 渲染器(渲染 google.com):
尝试使用
克隆此仓库 运行一个示例:
cargo run --example google
cargo run --example url https://myurl.com
其他示例可用 添加 --release
以获得更好的运行时性能
Ctrl/Cmd + +
/ Ctrl/Cmd + -
来改变缩放,按 F1 显示布局矩形目标
Blitz 旨在渲染 HTML 和 CSS - 我们不想支持浏览器特性的全部(或者至少我们希望使所有这些“额外”特性成为可选的)。我们认为,对于渲染 HTML/CSS 的基本用例,浏览器过于臃肿。
我们确实打算支持:
现代 HTML 布局(flexbox、grid、表格、块、行内、绝对/固定等)。 高级 CSS(复杂选择器、媒体查询、CSS 变量) HTML 表单控件 使用 AccessKit 的可访问性 通过自定义小部件的可扩展性
值得注意的是,我们不提供像 webrtc、websockets、蓝牙、localstorage 等功能。在原生应用中,这些功能的大部分可以通过常规的 Rust crate 实现,而不需要与渲染器耦合。
我们还尚未为其他语言(JavaScript、Python 等)提供 Blitz 绑定,但愿意接受这方面的贡献。
架构
Blitz 分为几个部分:
blitz-dom
:核心 DOM 抽象,包括样式解析和布局,但不包括绘图/绘画。结合了 Stylo 和 Taffy 的优点,允许你构建可扩展的类似 DOM 结构。blitz
:为blitz-dom
添加了基于 Vello/WGPU 的渲染器dioxus-blitz
:Blitz 的 Dioxus 集成层。使用 Blitz 渲染你的 Dioxus 应用。目前dioxus-blitz
还包含了 HTML 渲染器,但这很可能在未来被拆分为独立的包。
状态
Blitz 目前是实验性的。我们正在积极努力使其达到可用状态,但我们还不推荐用它来构建应用。
待办事项
[x] 核心 DOM 树抽象 [x] 使用 html5ever 解析样式 [x] 为 html5ever 文档计算样式 [x] 使用 Taffy 计算布局 [x] 使用 WGPU 渲染
渲染
[x] 渲染到窗口 [x] 渲染到图像 [x] 渐变 [x] 边框/轮廓 [x] 光栅图像(png、jpeg 等) [x] 缩放 [ ] SVG [x] 外部 SVGs(基本支持) [ ] 内联 SVGs [ ] 阴影 [ ] 动画/过渡 [ ] 标准表单控件(复选框/下拉菜单/滑块等) [ ] 自定义小部件 [ ] 阴影元素
布局
[x] 行内(部分支持 - 实现仍然不成熟) [x] 块 [x] Flexbox [x] Grid [ ] 命名网格线 [ ] 子网格 [ ] 表格 [ ] Z-index [ ] 其他 CSS 特性 [x] box-sizing: content-box
[ ] calc()
[ ] position: static
[ ] direction: rtl
[ ] transform
文本
[ ] 字体加载 [x] 系统字体加载 [ ] Web 字体加载 [x] 文本 [x] 塑形/双向 [x] 布局/行断 [x] 字体大小/行高 [x] 文本颜色 [x] 粗体/斜体 [x] 下划线/删除线 [ ] 文本选择
输入
[ ] 滚动 [x] 根视图 [ ] 任何 overflow: scroll
元素[x] 悬停检测 [x] 点击处理 [x] 文本输入
性能
[x] 热重载 [ ] 无需重新解析样式和布局的滚动 [ ] 样式缓存 [ ] 布局缓存
其他
[x] 多窗口 [x] 可访问性树 [x] 焦点 [ ] 开发工具 [ ] 上下文菜单钩子 [ ] use_wgpu_context()获取元素作为任意渲染表面
Dioxus Discord: https://discord.gg/v4mwT25E
[2]Stylo: https://github.com/servo/stylo
[3]Vello: https://github.com/linebender/vello
[4]WGPU: https://github.com/gfx-rs/wgpu
[5]Taffy: https://github.com/DioxusLabs/taffy
[6]Parley: https://github.com/linebender/parley
[7]AccessKit: https://github.com/AccessKit/accesskit
[8]Winit: https://github.com/rust-windowing/winit
[9]legacy: https://github.com/DioxusLabs/blitz/tree/legacy
github 地址:
https://github.com/DioxusLabs/blitz