Skip to content

缓存与性能

缓存层级

内容目标
内存当前与相邻章节、prepared pages边界即时切换
持久内容缓存网络章节正文和元数据离线/重启复用
图片缓存封面、正文图、解码结果避免重复下载/解码
布局缓存typography + viewport 对应分页减少重复 TextKit 工作

预取窗口遵守用户设置 1–10,默认值不会被代码静默提高。低电量或 serious/critical thermal 状态收缩到更小窗口并抑制网络预取。

性能门槛

  • 准备完成的章节边界零 I/O、零清洗、零分页;
  • 500 次翻页 p95 不高于 16.7 ms(60 Hz);
  • 无单帧达到 50 ms;
  • 连续滚动章节连接无明显空白、裁剪或 remount;
  • 20–30 分钟阅读无持续内存增长和无意义后台工作。

这些指标必须使用 Release 构建和真机 Instruments 验证。Windows 静态测试只能证明代码 结构与范围连续性,不能证明触摸和帧时间。

帧监控指标

阅读器内置的帧监控会持续统计 estimatedDroppedFrames(估算丢帧数)、 stallsAtLeast50Ms(≥50ms 的卡顿次数)、以及帧耗时的 p95/最大值,方便在没有连上 Instruments 的情况下也能定位问题。判读时注意区分两种模式:

  • 滑动分页的抖动通常来自“单页内容第一次构建”——比如章节刚加载完、还没预取到下一页时 用户就翻过去了,此时能看到一次孤立的高帧耗时尖峰;
  • 连续滚动的抖动更容易连续出现——如果懒加载容器的页面在滚动到可视区域时才开始分页/ 渲染,会表现为“滚动越快、卡顿越密集”,而不是孤立尖峰。

如果丢帧集中在“设置面板刚关闭、重新分页触发的第一次重排”,通常说明本次重排触发了整章 重新分页而不是局部更新,可以对照分页与连续滚动里“重新分页会生成 全新页面标识”的说明,先确认是否本该走局部更新的场景意外触发了整体重建。

Readori 使用与开发文档