Skip to content

1.2.5

Choose a tag to compare

@github-actions github-actions released this 29 Sep 03:43
· 2 commits to main since this release

两个问题:一个是我能定位的 bug,一个是"先把我们自己能控的都收干净 + 把下次取证做足"。

一、切到第二个 PDF 后滚一下,零点几秒被拽回原页

这是我上一版的判据留下的漏洞。判断「用户在动」要求 输入时间 > firstReadyAt,而 firstReadyAt 是我们第一次看见这个视图就绪的那一拍 —— tick 一秒一拍,而你切过去往往立刻就滚了。那一下输入发生在我们的观测之前,于是没算数,接着照常恢复 → 把你拽回切过去时的那一页。

现在按视图记账(叶子 + 路径),并且给 1.5 秒的观察余量:只要输入落在这个视图里,哪怕发生在我们第一次看见它之前,也算数。附带两个改善:在别的面板点一下不会再取消这篇笔记的恢复;几分钟前的输入也不会再影响这一次。

验过红:把判据退回旧写法,新用例精确复现 restored=1 applied=1(就是"拽回")。

二、内存涨到 4GB / 崩溃

日志里能看到一个确实该修的问题:

记录位置:…数学物理方法….pdf 第 53 页 → 第 53 页
记录位置:…数学物理方法….pdf 第 53 页 → 第 53 页   ← 一秒一行

页码根本没变,却每秒判定"变了" —— 因为 scrollTop 这种浮点每秒都会在末位抖,而比对用的是严格相等。结果:每秒重写记录、每秒往 localStorage 写一次表。已改成 2px 容差 + 取整指纹,静止时一次都不写。

同时把能收的都收干净:

  • 没有 PDF 视图开着时,连 localStorage 都不解析;
  • 记录页码超出文档总页数就不跳(硬跳只会落在最后一页,然后每拍都"不符"再跳一次);
  • 同一文件连续套用 6 次仍不成功就停手 —— 防的是"视图被反复重建 → 计数被重置 → 我们跟着反复套用"那种失控(成功到位即清零,正常反复开同一份文件不受影响);
  • 调试日志文件封顶 2MB;
  • onunload 清掉所有补拍定时器。

但要说实话:上面这些都不足以单独解释 4GB。我能做的是把属于我们这一侧的浪费和隐患都堵住、把量级压下来;"到底是 app 还是插件"还需要一次对照实验(见下)。

三、下次取证会更直接

applyPdf 现在会记一行:想要第几页 / 套用前第几页 / 读回第几页 / 共几页。所以下次再出现"跳回",日志能立刻分辨是我们跳的还是 pdf.js 自己重载后落的位。