批量渲染:glimmer 与 Datastar 如何扛住一百个并发页面
来源:yogthos.net — 2026-11-10
📋 概述
作者为 jolt 做服务端响应式渲染,最初每次写入都唤醒所有订阅该 ratom 的 SSE 流去重渲染,成本是「写入数乘以页面数」。改造后写入只把流标脏,由固定 tick 的渲染循环统一渲染一次;再为组件加缓存与 capture 机制,避免同一块 UI 在多个页面里重复渲染。
🔑 核心要点
- 十个页面各来一百次写入,改造前要渲染一千次,其中绝大多数结果会被丢弃
- 慢客户端使用窗口为 1 的滑动缓冲,新帧直接覆盖旧帧,掉帧而不是把队列撑爆
- tx! 把写入也按 tick 批处理,写入与渲染轮流执行,避免渲染看到半成品状态
- 组件缓存以「函数 + 参数」为键,并用 capture 记录读过的响应式单元来判断何时失效
- 在 4 核、100 条流、300 行看板的场景下,组件缓存是最大的性能收益,渲染线程两个就够
💡 金句
写入只负责把读它的流标脏,渲染循环再在固定节拍里把攒下来的变化一次性画出来。
← 返回 Lobsters 首页