Skip to content

Latest commit

 

History

History
51 lines (34 loc) · 2.16 KB

File metadata and controls

51 lines (34 loc) · 2.16 KB

Benchmarks

本目录使用 XCTest Performance API 测量 StructuredLayout 的布局安装成本。

Scope

三条路径都会创建相同的 8 个业务 UIView,并完成:

  1. 创建 100 张代表性卡片。
  2. 安装布局约束。
  3. 调用一次 layoutIfNeeded()

三条路径分别使用 Native Auto Layout、SnapKit 6.0.0 和 StructuredLayout。StructuredLayout 路径还包含 DSL 节点构建和嵌套 UILayoutGuide 的成本,这正是本 Benchmark 希望持续观察的抽象开销。

Benchmark 是独立 Swift Package。SnapKit 只存在于本目录的开发测试依赖中,不会成为 StructuredLayout 核心 Package 的传递依赖。

Run

在 Benchmark 目录执行,并将 Simulator 名称替换成本机已有设备:

cd Benchmarks
xcodebuild \
  -scheme StructuredLayoutBenchmarks-Package \
  -destination 'platform=iOS Simulator,name=iPhone 17' \
  test \
  -only-testing:StructuredLayoutBenchmarks

在 Xcode 中也可以打开 Benchmarks/Package.swift,选择 StructuredLayoutBenchmarks-Package Scheme 运行。

Local Snapshot

2026-07-15 的一次 Debug / iPhone 17 Simulator / iOS 26.5 测量:

Path 100 cards Per card Physical memory delta
Native Auto Layout 39.5 ms 0.395 ms 495 KB
SnapKit 6.0.0 48.7 ms 0.487 ms 485 KB
StructuredLayout 56.4 ms 0.564 ms 482 KB

这次快照中,StructuredLayout 相比 SnapKit 的安装与首次布局约增加 7.6 ms / 100 张卡片,即约 0.076 ms / 张;相比 Native Auto Layout 约增加 0.169 ms / 张。内存差异处于本次测量噪声范围内。

这些数字不是跨设备承诺。Simulator、Debug 编译、系统负载和 Xcode 版本都会影响结果;提交性能结论前,应增加 Release 真机测试并重复采样。

Interpretation

  • 该测试测的是布局创建阶段,不是滚动 FPS。
  • 不应在 Cell 的每次 configure 中重复安装布局;应在初始化阶段安装一次。
  • 如果后续增加布局树 Diff、缓存或新的布局节点,应保留此基线并检查回归。
  • XCTest 默认采样多次;以其输出的 average 和 relative standard deviation 为准。