← 揭开黑盒:理解系统的调查课堂

第二单元:页面里的“现在”,是什么时候?

你把一项任务勾选为“完成”。左边已经打上勾,右边的统计却仍写着“完成 0 项”。

两边都没有报错。

你刷新了一下,数字终于一致了。于是关掉页面,觉得事情解决了。

但刚才究竟发生了什么?是数据被修好了,还是你终于收到了一份更新的消息?如果没有这次矛盾,你会知道自己看见的是什么时候的结果吗?

保存之后,还有一段路

第一单元让我们问“东西留在哪里”。这一单元继续问:留在那里的东西,怎样成为眼前的画面?

我们很自然地把页面当作系统的“现在”。但页面只能沿着某条路径,获得一份结果,再按某种规则显示它。对象、读取时刻和显示规则,任何一处不同,都可能造成看起来相似的矛盾。

这还不能直接证明“都是缓存”。两边也可能读了不同任务,或者收到相同数据却算成不同数字。先保留这些解释,不要因为刚学到一个概念,就让它承担全部答案。

留住同一个现场

下载课程后,在 assets/state-lab/ 运行 py -3 lab.py;macOS/Linux 用 python3 lab.py。打开启动窗口给出的本机地址,默认端口 8035。详细操作集中在该目录 README,实验只用标准库。

页面提供现场甲、乙、丙。先选择一个,保留它的编号。三个现场都会出现“左边已完成,右边仍为 0”的表面现象。

我们把原始画面留成一份起始快照,方便不同调查者核对同一次分歧。操作区会继续产生新版本;“再看起始快照”只重新显示那一幕,不撤销服务端后来的操作。实验明确区分场景准备和你随后发起的真实请求。

暂时不纠正数字。先写下:你以为右边正在统计什么?你凭什么认为它应该和左边一致?本实验的预期用途是让右侧统计左侧那组任务的完成项数,但实时程度仍需要进一步讨论。

这次可以分路走

从你最怀疑的边界进入,也可以分工:

三条线都能独立从这份起始快照出发。你可以先读一条,带着新疑问切换,也可以把现场链接交给同伴,各查一路。它们的关系是并行调查,文件编号不规定阅读先后。

实验台会为每位调查者建立独立记录册。共享链接只带现场编号;地址栏多出的 book 参数定位自己的本地进度。跨浏览器的笔记通过文件汇合,不能仅凭同一个链接就假定笔记已同步。

带回什么,才能汇合

每条线至少带回一张证据卡:实验前预测、实际观察、引用的证据编号、解释,以及仍未排除的可能性。可见的 S 编号来自本次服务现场;C 编号来自各个浏览器的观察,不能把不同浏览器的局部序号直接排成一条总时间线。

三路材料齐全后,到 汇合页 解释它们怎样共同说明这次分歧。可以提前阅读汇合要求;实验台会告诉你缺哪路材料,但不会把“填完了”判成“理解正确了”。

这次我们希望带走的,不只是让两个数字暂时一致的方法,而是一个更精确的问题:这份画面,来自哪个对象、哪个时刻,又经过了什么处理?