Blitz:一个轻量级、模块化、可扩展的 Web 渲染器

文摘   2024-08-13 00:11   江苏  

Blitz:一个轻量级、模块化、可扩展的 Web 渲染器

想象一下,一个轻量级、模块化、可扩展的 Web 渲染器,它就像是网页界的“闪电侠”,快速、灵活,而且还能和 Rust API 直接对话,这简直是技术界的超级英雄团队!

项目亮点:

  • Blitz:不是那种只会在雷雨天才会露面的人才,它随时待命,准备为你的 Web 应用注入活力。
  • 前端:有两种模式,一种是 HTML/Markdown,另一种是 Dioxus,让你的应用既能展示也能互动,就像拥有了两种超能力。
  • 构建基础:从 Stylo 到 Winit,Blitz 集合了各路英雄的力量,打造了一个强大的技术联盟。

试用指南:

  1. 克隆仓库:这不仅仅是复制代码,这是加入 Blitz 超级英雄团队的第一步!
  2. 运行示例:选择你的战场,无论是 Google 还是你自己的 URL,Blitz 都能轻松应对。
  3. 调整视图:用快捷键放大或缩小,就像调整你的超级视力,查看 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):

尝试使用

  1. 克隆此仓库
  2. 运行一个示例:
  • 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()获取元素作为任意渲染表面
    参考资料
    [1]

    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

    编程悟道
    自制软件研发、软件商店,全栈,ARTS 、架构,模型,原生系统,后端(Node、React)以及跨平台技术(Flutter、RN).vue.js react.js next.js express koa hapi uniapp Astro
     最新文章