Skip to content

Commit 7401f0c

Browse files
committed
fix #4946
1 parent a713cc2 commit 7401f0c

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

Reports/2025/#329-2025.03.31.md

+9
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,15 @@
5959

6060
如果你是一名希望拓展技术广度的开发者,值得一度。
6161

62+
### 🐕 [Fast & Fluid: Integrating Rust egui into SwiftUI](https://medium.com/@djalex566/fast-fluid-integrating-rust-egui-into-swiftui-30a218c502c1)
63+
64+
[@david-clang](https://github.com/david-clang):作者在开发实时预览 SwiftData 和 CoreData 数据库的 Mac App [DataScout](https://apps.apple.com/us/app/datascout-for-sqlite-swiftdata/id6737813684) 时,发现 SwiftUI 的 `Table` 性能相当差,尝试用 AppKit 的 `NSTableView` 也无法满足需求,最后用 Rust 的 UI 框架 `egui` 去优化性能。作者把 SwiftUI 中嵌入 `egui` 渲染视图的 Demo 整理成文章,还用代码示例展示如何在 SwiftUI 的 `NavigationSplitView` 中嵌入 `egui` 渲染的视图。以下是`egui` 和传统 UI 框架的对比:
65+
66+
- 传统 UI 框架(如 SwiftUI、UIKit)多采用**保留模式(Retained Mode)**,需显式管理 UI 组件状态(例如按钮状态、列表数据等),框架内部通过对比新旧状态差异来局部更新界面。
67+
- `egui`**即时模式(Immediate Mode)** 则相反:**每帧完全丢弃旧 UI 状态**,根据当前数据重新生成整个界面,通过高频重建实现“无状态化”。
68+
69+
虽然 Demo 中使用 `egui_wgpu_backend` 作为渲染后端,但它在 Metal 上渲染单帧需要 10 毫秒,作者在开发 [DataScout](https://apps.apple.com/us/app/datascout-for-sqlite-swiftdata/id6737813684) 时,通过自定义渲染后端,把帧渲染时间缩短到仅 1-2 毫秒,最终才实现高性能需求,可见把 “SwiftUI 中嵌入 `egui` 渲染视图” 封装成成熟框架会比较难,但本文优化 SwiftUI 性能的思路值得我们学习。
70+
6271
## 工具
6372

6473
> 开发过程中常用的工具,及一些新工具的介绍

0 commit comments

Comments
 (0)