Skip to content

inkScroll 0.3.6

Latest

Choose a tag to compare

@BaiFeng940 BaiFeng940 released this 19 Oct 11:43

inkScroll 0.3.6

针对「网盘库里文件多了之后加载很慢」做了一轮实测优化:大库导入快约 3.8 倍。

瓶颈在哪(逐项量出来的)

# 问题 代价
1 扫描子目录串行(一个目录一次 PROPFIND) 100 个文件夹光等就几十秒
2 每本书都新建连接(TCP + TLS 握手) 100 本 = 100 次握手
3 每本嗅探 16 张图的尺寸 每本多十几倍往返
4 书架写入是 O(n²)(每本重写整个书架 JSON) 越到后面越卡
5 启动时给整个书架生成封面 每本下载一整张原图
6 重复导入产生重复的书 书架越用越乱

改了什么

  1. 扫描并行 5 路,结果按原始下标放回,目录自然序不乱
  2. 整批复用同一个连接,最后统一关闭
  3. 嗅探样本 16 → 4:同一话里的图几乎总是同尺寸,中位数兜底足够
  4. 批量写入书架:一次读一次写;导入期间只攒元数据,整批结束才刷新 UI
  5. 封面按需生成:书架卡片可见时才请求;启动时只补本地库
  6. 按 (连接, 目录) 去重,重复添加会明确提示「都已在库里」
  7. HTTP 连接池固定 maxConnectionsPerHost=6,长连接复用

实测数据(A/B 基准,tool/bench_scan.dart)

12 本 × 20 页,用模拟服务器注入固定 RTT:

60ms RTT(较好的隧道)

阶段 优化前 优化后 加速
扫描 940 ms 252 ms 3.73x
单本嗅探 302 ms 77 ms 3.92x
整库 4.6 s 1.2 s 3.88x

150ms RTT(较差的公网)

阶段 优化前 优化后 加速
扫描 2053 ms 517 ms 3.97x
单本嗅探 645 ms 170 ms 3.79x
整库 9.8 s 2.6 s 3.83x

收益与 RTT 成正比 —— 符合「消除往返次数」的预期:网络越慢,提升越大。

顺带修掉的两个真 bug

  • upsertBooks 会覆盖错书:最初「边遍历边 insert(0)」,头部插入让已记录的下标整体错位,按旧下标更新会写到别的书上 —— 书架出现重复项且书名错乱。这个问题是新加的单元测试抓出来的。
  • 测试服务器是串行的:await for 里直接 await 处理请求,用它跑基准会得出「并行没有用」的错误结论(实测只快 1.12x)。改为每请求独立 task 后才测出真实差距。

下载

架构 适用机型
inkscroll-0.3.6-arm64-v8a.apk 绝大多数现代手机(推荐)
inkscroll-0.3.6-armeabi-v7a.apk 较老的 32 位设备
inkscroll-0.3.6-x86_64.apk 模拟器

analyze 0 issue,测试 73 全通过;已在 Android 13 真机(V2073A)验证导入、封面、去重。