I2.11.4each chunk a coherent state设计
分块呈现的每一步都应是自洽的可用状态而非半成品
别名: 逐步自洽 · 不是半成品 · usable intermediate
概念解释
逐步呈现停在任何一帧,这一帧都应当是一个自洽的可用状态:该有的标签在、数字和单位成对、主操作要么能做要么明确还不能做、没有指向尚未存在的控件的句子。半成品是另一回事:标题在、价格位置空白却按钮写着「立即以 -- 购买」、表格缺列名、一段话写到一半。分块是时间上的切片,不是把对象切成不能单独拿出来的碎片。
机制
人可能在任何一帧离开、截图、读屏朗读、或把这一帧当成完整来行动。自洽要求每一帧都能单独拿出去仍讲得通。半成品把内部组装过程暴露成界面:缺的不是「还有一块在路上」——那可以是一个合法的未完成线索——而是「已经画出来的那部分自己语法坏了」。语法坏了的界面会被当成产品坏了,而不是当成加载中。
自洽与「看起来完整」不同。自洽允许标明未完,只要已呈现的命题为真。一张表可以只有三列且注明「更多列加载中」,这是自洽的未完;三列里数字对不上列名,是半成品。主按钮可以禁用并写「价格加载中」,这是自洽;按钮可点但价格是占位符,是半成品。逐步呈现的每一步是状态机上的合法态,不是渲染器的中间缓冲区。
边界
骨架自己不是半成品,它声明的是占位,不是残缺的真内容;骨架停太久会变成残缺真页面,那是骨架时效问题。动画过渡的中间帧(淡入到 40% 透明度)不必自洽到可操作,但应短,且不可被截成「这就是产品」。无障碍树上若把未完成的残句读出来,自洽在视觉上成立、在听觉上失败,文本节点不要挂半截字符串。数据在服务器侧就是半截(断流的生成),界面应标成「生成中断」这类状态,而不是把半截当正文。
怎么落地
- 每个块上屏前问:拿掉尚未到达的其余块,这一屏的句子、数字、按钮是否仍为真、仍可解释。
- 缺依赖的操作走禁用加原因,不要走带占位符的可点。
- 表格、表单、价格这类成对信息一起到,或一起不出,避免列名和单元格分两次画成错位的真内容。
- 验证:在主列到达、其余全断的那一帧截屏并读屏。若出现「--」「undefined」、残句、或指向不存在控件的说明,这一帧就是半成品。修到这一帧可以单独给人用,再谈后续块。