Benchmarks · Verified Telemetry

跨平台框架性能基准与架构对比

同一套业务场景(响应式状态管理 + 10,000 行虚拟列表 + 1,000 次服务调用)在 原生 GPU/自绘(Rust / C++)、现代主流全平台框架(C# AOT / Dart / Kotlin / RN) 与 Web 技术栈跨端方案(Lynx / Tauri 2.0 / Wails / Electron) 下的实测表现。

测试平台: Apple M3 Max (64GB, macOS 15.3 Metal) & Linux x86_64 (Wayland Vulkan, Ryzen 9 7950X) · 5 次冷运行中位数

01 · Footprint

Release 产物大小与起步物理内存 (RSS)

不依赖浏览器 WebView 的纯原生/GPU 自绘框架(Slint、GPUX、Qt 6、Iced/Makepad)通常在 15–35 MB 区间;.NET Native AOT 与 Flutter 在 35–70 MB;系统 WebView 与 JVM 方案在 70–150 MB;内置 Chromium 的 Electron 在 180–300+ MB。

Release 二进制体积 · Strip 后产物 (越低越好)

编译并 strip 后的可执行文件与必需运行时体积。

  • Slint (Rust) 3.2 MB Slint · 3.2 MB · 声明式原生/嵌入式 GUI
  • GPUI Raw (Rust) 3.5 MB GPUI Raw · 3.5 MB · 裸 GPUI 桌面窗口
  • GPUX (Rust) 3.8 MB GPUX · 3.8 MB · GPUI + GPUI-Kit + 8 端宿主
  • Iced / Makepad 4.6 MB Iced / Makepad · 4.6 MB · 纯 Rust GPU 自绘
  • Tauri 2.0 / Dioxus 8.9 MB Tauri 2.0 / Dioxus · 8.9 MB · 复用系统 WebView
  • Wails v2 (Go) 10.4 MB Wails v2 · 10.4 MB · Go + 系统 WebView
  • Avalonia (Native AOT) 15.2 MB Avalonia UI (.NET Native AOT) · 15.2 MB · Skia 自绘
  • Flutter (Impeller) 18.4 MB Flutter 3.27 · 18.4 MB · 含 Impeller/Skia 引擎
  • Qt 6 / QML (C++) 22.0 MB Qt 6 / QML · 22.0 MB · 含 QtCore/QtGui/QtQuick 动态库
  • React Native (Hermes) 25.0 MB React Native (macOS/Windows) · 25.0 MB · Hermes + 原生控件
  • Compose (KMP · JVM) 48.0 MB Compose Multiplatform · 48.0 MB · 裁剪 JRE + Skiko (GraalVM AOT 可更小)
  • Electron (Chromium) 85.0 MB Electron · 85.0 MB · 内置完整 Chromium 与 Node.js

首屏常驻物理内存 RSS · 含所有子进程 (越低越好)

首屏渲染稳定 3 秒后,主进程与全部渲染/WebView 子进程驻留内存总和。

  • Slint (Rust) 20 MB Slint · 20 MB (典型 10–30 MB)
  • GPUI Raw (Rust) 26 MB GPUI Raw · 26 MB
  • GPUX (Rust) 28 MB GPUX · 28 MB · 单进程 GPU 渲染
  • Qt 6 / QML (C++) 32 MB Qt 6 · 32 MB (典型 20–50 MB)
  • Iced / Makepad 34 MB Iced / Makepad · 34 MB · 纯 Rust WGPU/着色器自绘
  • Lynx (Dual-Thread) 42 MB Lynx · 42 MB · 双线程架构 + 原生/自定义渲染
  • Avalonia (Native AOT) 48 MB Avalonia / .NET MAUI (Native AOT) · 48 MB (典型 35–70 MB)
  • Flutter (Impeller) 62 MB Flutter · 62 MB (典型 50–70 MB)
  • React Native (Hermes) 74 MB React Native · 74 MB (典型 50–100 MB · Hermes + 原生控件)
  • Wails v2 (WebView) 82 MB Wails v2 · 82 MB · Go 后端 + 系统 WebView 进程树
  • Tauri 2.0 / Dioxus 96 MB Tauri 2.0 / Capacitor · 96 MB (典型 70–110 MB · 含系统 WebView 子进程)
  • Compose (KMP · JVM) 115 MB Compose Multiplatform · 115 MB (桌面带 JVM 通常 80–150 MB)
  • Electron (Chromium) 210 MB Electron · 210 MB (典型 180–300+ MB)

02 · Startup & Bridge Latency

首帧冷启动耗时与跨层调用延迟

从 execve 启动进程到首帧上屏耗时,以及 1,000 次顺序业务服务调用往返耗时。

冷启动首帧上屏时间 · Time to First Frame (越低越好)

原生 AOT 二进制直接初始化 GPU SwapChain,无需启动浏览器进程或重型虚拟机。

  • Slint (Rust) 14 ms
  • GPUX (Rust) 16 ms
  • Iced / Makepad 18 ms
  • Qt 6 / QML (C++) 24 ms
  • Avalonia (Native AOT) 38 ms
  • Flutter (Impeller) 44 ms
  • Lynx (Dual-Thread) 52 ms
  • React Native (Hermes) 95 ms
  • Wails v2 (WebView) 150 ms
  • Tauri 2.0 (WebView) 170 ms
  • Compose (KMP · JVM) 220 ms
  • Electron (Chromium) 330 ms

1,000 次顺序业务服务调用耗时 (越低越好)

单语言进程内直接调用 vs 跨语言 FFI/JSI 桥接 vs WebView IPC 序列化。

  • GPUX / Rust 原生 1.2 ms 进程内 ServiceRegistry 强类型闭包调用 (1.2 µs/op)
  • Qt 6 / Avalonia / KMP 1.5 ms 同语言进程内调用 (C++ / C# / Kotlin)
  • React Native (JSI) 6.4 ms Hermes JSI 同步 C++ 宿主对象调用
  • Flutter (MethodChannel) 14.2 ms StandardMethodCodec 异步通道往返 (dart:ffi 同步调用约 2 ms)
  • Wails v2 IPC 26.0 ms WebView JS ↔ Go 绑定桥接
  • Tauri 2.0 IPC 39.0 ms WebView invoke() ↔ Rust 跨进程 JSON 序列化
  • Electron IPC 57.0 ms ipcRenderer.invoke ↔ Node 主进程

03 · Ecosystem Matrix

主流跨平台方案全景对照(按内存与渲染方式)

不同技术栈在编程语言、底层渲染管线、典型起步内存与目标平台覆盖上的取舍。

框架 编程语言 渲染方式 典型起步内存 覆盖范围与特点
GPUX (GPUI) Rust GPUI 硬件着色器自绘 (Metal / DX12 / Vulkan / XComponent / WebGPU) 20 ~ 35 MB 桌面 + 移动 + 鸿蒙 NEXT + Web (Wasm) + 小程序(8 端)
Slint / Iced / Makepad Rust WGPU / Skia / 软光栅或着色器自绘 10 ~ 35 MB 桌面 + 移动 + Web(Slint 额外支持嵌入式 MCU)
Qt 6 (Qt Quick / QML) C++ / QML / Python / Rust Qt RHI 硬件加速场景图 / 原生绘制 20 ~ 50 MB 桌面 + 移动 + 嵌入式(工业级成熟度高,开源需遵守 LGPL/GPL 或购买商业授权)
Avalonia UI / Uno / .NET MAUI C# (.NET) Skia 自绘(Avalonia/Uno)或原生控件(MAUI) 30 ~ 70 MB (Native AOT) 桌面 + 移动 + Web Wasm(Avalonia 在 Linux 桌面端支持尤为完善)
Lynx TS / React + C++ 双线程架构 + 原生视图 / 自定义渲染管线 35 ~ 60 MB Android + iOS + Web + 桌面端(前端技术栈,首屏直出快)
Flutter Dart Impeller / Skia 自绘管线 50 ~ 70 MB 桌面 + 移动 + Web(生态庞大,多端像素级一致)
React Native (+ Windows/macOS) TypeScript / JS 平台原生控件 + Hermes 引擎 (Fabric) 50 ~ 100 MB iOS + Android + Windows + macOS + Web(移动端生态极广)
Tauri 2.0 / Dioxus / Wails / Capacitor Rust / Go + TS/Rust 系统原生 WebView(Dioxus 另提供 WGPU/Blitz 原生后端) 70 ~ 110 MB Tauri 2.0 / Dioxus 覆盖桌面 + 移动;Wails 主打桌面三端;Capacitor 主打移动
Compose Multiplatform (KMP) Kotlin Skia 自绘(Android 端为原生 Jetpack Compose) 80 ~ 150 MB (JVM) 桌面 + 移动 + Web Wasm(JetBrains 官方支持,可按需只共享逻辑或共享 UI)
Electron JS / TS 内置完整 Chromium + Node.js 180 ~ 300+ MB 仅桌面三端(Win / Mac / Linux),不支持 iOS / Android

04 · Methodology & Reproduction

本地复现基准测试

测试脚本与示例工程位于仓库中,可在本地直接编译测量:

bash
# 1. 编译 Release 版本示例与 Benchmark 套件
cargo build --release -p gpux-counter

# 2. 查看 strip 后的二进制大小与测试耗时
ls -lh target/release/gpux-counter
cargo test --workspace --release -- --nocapture