今早自动升级到 2.5.5 ,有个自动签到的功能,但估计 vibe 出了个死循环。在好几个 profile 里全中:浏览器( Phi )主进程 147% CPU ,每个 profile 的 Service Worker 各占 37% 左右,实测 chrome.storage.local 里的 daily 每秒被写 2500 次左右 🫠
原因在 background 的 reconcileCheckInAlarm:
1. 存储里的 daily 没有 memberName 时,normalizeCheckInState 每次都走 createScheduledState(undefined, now, 随机 jitter),返回一个全新的对象,targetAt 每次都不一样。
2. reconcileCheckInAlarm 用 state !== storage.daily 判断,新对象永远不相等,于是 setStorage("daily", state)。
3. 写入触发 chrome.storage.onChanged ,监听里又调 scheduleCheckInAlarm ,回到第 1 步,无限循环。
触发条件:升级到 2.5.5 之后还没打开过 V2EX 页面( content script 还没把用户名报给 background ),或者没登录。关掉自动签到也没用,因为写入发生在判断 autoCheckIn.enabled 之前。
临时解决:在每个装了插件的浏览器 profile 里,登录状态下打开一次
v2ex.com 任意页面,memberName 写进去之后循环就停了。没登录的 profile 先把插件停用。
我看 GitHub 上 #158 、#159 报的是同一个问题。作者看到的话,辛苦尽快发个 2.5.6 。