用户可见的状态应跨会话保留
别名: 跨会话 · 下次打开还在 · session restore · 状态保留
概念解释
人关掉应用、锁上电脑、过了一夜再打开,上次看见的世界应还在:未写完的草稿、筛过的列表、读到一半的位置、打开过的几个面板。跨会话持久化(cross-session persistence)保留的是用户已经付出感知成本的状态,不是进程碰巧还活着。会话结束若把这些清零,下次进来的人要重新付出同样的成本,产品像失忆。
「用户可见」划了一条线:看见过、依赖过的,下次还要能看见。内部缓存、临时 token、一次滚动的惯性,不在这条的义务里。隐私范围和怎么清掉,是另外两笔账。
机制
会话是进程寿命,任务是人的寿命。人把一个编辑、一次筛选、一页阅读当成未完成的任务带走过夜,进程却在锁屏或杀后台时结束。若状态只活在内存,任务边界被进程边界切断,人第二天面对的是空白,必须靠回忆重建。回忆比再看一眼贵,而且会错。
可见状态是已经进入模型的那一层:草稿文字、当前筛选、滚动锚点、侧栏是否展开。它们的获取成本已经被付过。持久化是把这层从进程搬到磁盘(或账号),让下一次进程把模型装回来。装回来必须快到像「没关过」,否则人会以为丢了、再写一遍,造成双份。没装回来则是确定性丢失:不是同步冲突,是产品自己把昨天扔掉。
边界
登录页、结账的卡号、一次性验证码不应跨会话以明文可见状态留下——那是隐私与安全,不是「可见所以该留」。故意的「新的一次」入口(新文档、新搜索、退出登录)要能开始空白,不能把持久化做成无法开始的黏性。公共终端、借用的设备上,跨会话保留会变成泄露;默认仍应保留到明确退出或锁屏策略触发。只读内容的滚动位置在极长列表里有用,在每天更新的信息流里可能把人钉在过期处,这时该留的是「看到哪一条」的锚,而不是像素级偏移。崩溃恢复比正常退出更需要持久化:正常退出至少是自愿的,崩溃把任务切在半句。
怎么落地
- 列出用户可见且获取成本高的状态:草稿、筛选、阅读位置、未完成的多步、打开的对象。这些在进程被杀后仍在。
- 写入时机赶在进程可能被杀之前(输入暂停、切后台),不要等「保存」按钮。
- 下次打开的第一屏应能认出「这是昨天的」,而不是先闪空白再异步填回——空白会被当成丢失。
- 验证:写一半草稿、筛一个列表、滚到中部,强杀应用,再打开。三样都应在,且不必再操作一遍。对照:只杀一个标签再回来,也应同样保留,证明不是「碰巧进程没死」。