sse通过单向长连接实现低功耗实时更新,避免轮询、按需推送增量数据、前端智能渲染,显著降低请求频次、带宽与cpu开销。

JavaScript 中 SSE(Server-Sent Events)在实时股票行情或看板系统中实现低功耗数据更新,核心在于避免轮询、减少连接开销、按需传输增量数据,并配合前端智能处理。它比 WebSocket 更轻量,适合“服务器→客户端”单向、高频但数据量小的场景(如价格变动、涨跌幅、成交量等字段级更新)。
用 SSE 替代定时轮询,显著降低请求频率和连接压力
SSE 建立一次长连接后,服务端可主动推送变化,客户端无需每秒发起 HTTP 请求。例如:轮询每 500ms 一次,1 分钟就发 120 次请求;而 SSE 全程仅 1 次握手 + 持续复用连接。实际部署中,多数股票行情只在有真实成交或报价变更时才推送,空闲时段无数据流,CPU 和网络消耗极低。
- 客户端使用 EventSource 创建连接,自动重连(可配置
retry时间) - 服务端响应头必须包含
Content-Type: text/event-stream和Cache-Control: no-cache - 避免在 URL 中带时间戳等随机参数(会干扰浏览器连接复用)
只推送变更字段,而非全量快照
股票行情数据通常每秒变动多次,但单只股票每次可能仅 1–2 个字段更新(如最新价、买一价)。SSE 消息体应设计为轻量 JSON 补丁格式,例如:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
{"symbol":"AAPL","fields":{"last":192.45,"change_pct":0.23}}
前端收到后仅更新对应 DOM 或状态,不重新渲染整行。相比每秒推送 5KB 全量 JSON,这种差分更新可将带宽降低 70%+,JS 解析和 DOM 操作开销也大幅下降。
- 后端按 symbol 或 group 聚合变更,合并微秒级抖动(如 10ms 内同一股票多次更新,只推最后一次)
- 前端用 Map 缓存当前行情,对比 key-value 差异再触发 UI 更新
- 对非关键字段(如“更新时间戳”)可选择不推送,由前端本地记录接收时刻
连接生命周期管理:按需建立、空闲断连、异常降级
SSE 连接不是“永远在线”,而是围绕用户行为动态管理,进一步节能:
- 用户切换到行情页时才创建 EventSource;切走或关闭标签页时调用
eventSource.close() - 服务端设置合理的超时(如 45 秒无活动 ping 则断连),客户端监听
onerror并判断是否因网络恢复而重连 - 若 SSE 连续失败(如跨域限制、代理拦截),自动降级为 5–10 秒低频轮询,保证可用性不牺牲太多能耗
- 移动端可监听
document.hidden,页面不可见时暂停连接或延长重试间隔
配合前端渲染优化:虚拟滚动 + requestIdleCallback
即使数据流高效,万级股票列表的频繁 DOM 更新仍会卡顿。需结合渲染策略压低 CPU 占用:
- 使用虚拟滚动(如
react-window)只渲染可视区域行,避免全量挂载 - 对非高亮/非排序列(如“昨收”、“市盈率”)延迟更新,用
requestIdleCallback批量处理 - 价格数字动画(如绿色上浮)用 CSS transition + class 切换,而非 JS 逐帧操作
- 开启
will-change: transform提升关键单元格渲染性能
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










