2026-09-10,arm64 Mac / macOS 26.6.2。本次针对原生后端的图库响应与缓存写入开销,未改变 FIT 显示算法。
- 图库扫描完成时单独保存不带 SUB 明细的摘要。首页命中缓存时只复制摘要,不再复制、计算评分并丢弃全库的 SUB 明细。
- 单个目标的 SUB 接口只取该目标的明细,再应用当前评分和标签。后台 R2 仍可取得完整数据。
- 缓存写入在事务中增量维护记录数与占用,超过 2 GiB 才按访问时间淘汰旧记录;不再每写一条记录就执行全表窗口聚合。用 SQLite
data_version检测其他 App/CLI 连接的提交,变化后重新统计,保留旧缓存表格式。 - 复用设备名称解析的正则表达式,减少逐文件构造开销。
图库仍按原有 20 秒有效期和手动刷新规则扫描;SUB 日期、设备、滤镜和文件统计保持完整。后台预览缓存建立仍跳过 SUB,打开 SUB 图片时按需解析。没有以放宽缓存容量限制、减少图库内容或延长数据过期时间换取速度。
20 个目标、60 张成片、6,000 张 SUB。每个版本使用独立临时图库和空应用缓存,文件页由写入测试文件预热;这是软件开销测试,不是机械硬盘冷读测试。首次扫描和强制重扫各测一次,命中缓存的接口取 9 次中位数,并发请求为同时发起 8 次。
| 测量 | 优化前 | 优化后 |
|---|---|---|
| 空应用缓存首次图库扫描 | 7,237.16 ms | 1,163.23 ms |
| 头信息已有缓存时强制重扫 | 379.88 ms | 370.18 ms |
| 图库缓存命中 | 13.68 ms | 0.54 ms |
| 单目标 SUB 详情(300 帧) | 14.24 ms | 1.23 ms |
| 缓存状态读取 | 0.38 ms | 0.21 ms |
| 8 个并发图库请求的中位数 | 54.71 ms | 1.65 ms |
| 并发请求后进程常驻内存快照 | 88,464 KiB | 61,312 KiB |
返回内容仍包含 60 张成片、6,000 张 SUB 的完整分组统计,首页响应均为 40,517 字节。内存数据是同一阶段的快照,不是峰值测量。
对现有 9,219 个文件(其中 SUB 9,108 个)的图库,只读取 API,未清空用户缓存或改动照片。图库缓存命中请求由 22.84 / 22.59 ms 降至 1.35 / 1.30 / 1.11 / 1.00 ms,约从 23 ms 降至 1.2 ms。一次重扫样本为 632.48 → 563.22 ms;此路径仍需要访问磁盘和文件元数据,不应套用缓存命中请求的加速比。
另交替运行优化前后各 5 轮独立的 1920×1080 RGB float32 合成 FIT 测试,排除单次计时波动。每轮 CLI 渲染取 3 次中位数,最终再取 5 轮中位数:
| 测量 | 优化前 | 优化后 |
|---|---|---|
| CLI 渲染,含启动和 PNG 写盘 | 16.77 ms | 16.72 ms |
| 空应用缓存首次 HTTP 预览 | 107.53 ms | 107.30 ms |
| 内存命中 HTTP 预览 | 0.26 ms | 0.28 ms |
预览性能基本持平,本次收益主要在图库和大量缓存记录的维护。当前 App 已显示 34 个目标;页面搜索、M 31 的 SUB 分组及图片预览通过实际界面检查。
./script/build_native.sh
python3 tests/benchmark_library.py
python3 tests/benchmark_native.py
python3 -m unittest discover -s tests -v
node tests/test_gallery.cjs图库基准可传 --binary /path/to/astrolibrary 对比另一个自行保留的构建,也可用 --frames 12000 改变 SUB 规模。历史对照程序和临时测量文件已清理;原始汇总数据与两个构建的 SHA-256 保留在 library-performance.json。当前脚本仍可复测当前版本,复现历史版本间对比则需要对应源码或二进制。
上述结果是该日期的历史测量,不代表当前机器的实测值。回归覆盖包含跨连接缓存统计、同键替换、容量淘汰、清空和目标详情评分一致性;当前测试与打包检查入口见 开发文档。
同为 2026-09-10、arm64 Mac / macOS 26.6.2,使用 1920×1080 RGB float32 合成 FIT(24,886,080 字节),输出 960×540 预览。预热系统文件页后取 3 次中位数;C++ 包含进程启动和 PNG 写盘,Python 是进程内调用。
| 测量 | 耗时 |
|---|---|
| Python 解码、显示和 PNG | 915.07 ms |
| C++ 解码、显示和 PNG,含启动/写盘 | 15.91 ms |
| C++ FIT 解码阶段 | 4.07 ms |
| 原生 HTTP 首次预览,App 缓存为空 | 100.79 ms |
| 原生 HTTP 内存命中,10 次中位数 | 0.25 ms |
该合成样本的渲染约快 57.5 倍,输出像素一致;它不是机械硬盘冷读或整库扫描的加速比。原始结果见 native-benchmark.json。旧业务实现已移除,tests/benchmark_native.py 只复测当前 C++ 渲染/缓存及 CLI/HTTP 输出一致性,不重新计算 Python 对照。