Repository navigation
1.2.5
两个问题:一个是我能定位的 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 自己重载后落的位。