增量渲染(打字机效果) 前端与交互
别名:
打字机 · 打字机效果
流式前端把增量(`text_delta`)逐帧渲染的效果,文本像打字机一样逐字出现。要点是渲染永远发生在**完整文本**上而不是增量上——增量只负责「拼」,渲染只负责「读」;把 Markdown 解析放进增量路径是经典失败模式(代码块围栏会被拆进不同增量)。
它是什么
增量渲染(打字机效果)是流式前端把增量(text_delta)逐帧渲染的效果——文本像打字机一样逐字出现,用户在第一秒就看到「它开始说话了」。它把 ch03 讲的「总延迟转化为渐进可见进度」延伸到屏幕最后一公里。
关键原则:渲染发生在完整文本上
最容易翻车的地方:渲染永远发生在「完整文本」上,而不是增量上。一个代码块可能被拆在好几个 text_delta 里到达(开头的反引号行、语言名、代码正文、结尾的反引号行各是独立增量)——因为 reducer 先把增量拼成完整文本,渲染时再解析围栏,跨 delta 的代码块才能正确成块。把 Markdown 解析放进增量路径是本章最大的坑之一:增量渲染永远只见半个围栏。增量只负责「拼」,渲染只负责「读」。
两个配套细节
多字节字符可能被 TCP 切成两半,解码要用 TextDecoder.decode(value, { stream: true }) 的流式模式——「半个字符」问题在解码层解决,「半个事件」问题在分帧层解决(见 chunk);逐帧渲染的节奏由 requestAnimationFrame 之类的帧调度接管,避免每次 read() 都强制 DOM 回流。
在本教程的位置
第 17 章把视图模型渲染成文本帧(renderFrame)做演示与判题,浏览器版是 DOM patch(打字机文本节点、工具块、审批卡片、光标动画);messageText() 只拼接文本块,供增量渲染与「消息摘要」使用。相关词条:视图模型。