大屏卡顿、内存暴涨、服务端压垮多因滥用setinterval刷setoption或服务端推整套option所致;应改用websocket分发校验后数据,严格控制setoption参数与轮播暂停/恢复的双向同步机制。

别用 setInterval 刷 setOption,也别让服务端推整套 option 配置——大屏卡顿、内存暴涨、服务端压垮,八成是这两个操作惹的祸。
WebSocket 连接建立后,onmessage 里怎么安全解析并分发数据
收到 event.data 后直接 JSON.parse() 很危险:服务端偶尔发错格式、字段缺失、时间戳为 null,都会导致整个图表更新逻辑中断。必须加 try/catch + 字段校验。
- 先判断
typeof event.data === 'string',避免二进制帧或空消息触发解析异常 - 用
JSON.parse(event.data)包裹在 try 中,catch 里打印错误并return,不中断后续消息处理 - 关键字段如
chartId、data、timestamp必须存在且类型正确,例如Array.isArray(msg.data),否则跳过本次更新 - 建议统一加时间戳校验:
if (Date.now() - msg.timestamp > 5000) return,丢弃超时 5 秒的数据,防止大屏显示“昨天的实时”
echarts.setOption() 的第二个参数 true 到底该不该传
传 true 是 merge 模式,只更新传入的字段;传 false 或不传是全量替换。但实际场景中,它不是“性能开关”,而是“行为开关”——选错会引发数据残留或动画错乱。
ECharts 图表大师。根据用户数据和业务上下文,自动设计并生成专业的 ECharts 可视化图表。使用场景:(1) 用户提供表格/JSON/CSV 数据需要可视化,(2) 用户说"帮我做个图"、"画个图表",(3) 需要将查询结果可视化展示。
- 轮播切换场景(如从“销售趋势”切到“区域热力图”):必须传
false或省略,否则旧series还挂在实例里,新配置叠加后图表炸开 - 增量追加点(如每秒来一个新温度值):用
chart.addData(),而不是setOption,避免反复重建坐标轴 - 仅更新数值类 series(如告警计数、在线人数):可传
true,但必须确保传入的series数组长度与原系列一致,否则 ECharts 会静默忽略 - 地图类图表(
geo或map类型)禁用 merge:因地理坐标、label、emphasis 等配置耦合深,merge 容易漏掉视觉状态重置
大屏轮播中断时,前后端如何同步暂停状态
用户手动点击暂停按钮,前端只是停掉本地定时器,如果服务端还在按节奏推指令,一恢复就会“跳帧”甚至错乱。必须让暂停变成双向确认动作。
- 前端发送暂停指令到 WebSocket:
{"type": "pause", "chartId": "sales-trend", "reason": "user-click"} - 服务端收到后,立即停止向该连接推送该
chartId相关指令,并返回确认包:{"type": "paused", "chartId": "sales-trend", "seq": 123} - 前端收到确认包才真正冻结图表更新逻辑;若 2 秒内没收到,主动重发暂停指令,最多试 3 次
- 恢复时同理:先发
{"type": "resume", ...},等服务端回{"type": "resumed", ...}再调用setOption或继续轮播队列
真正难的不是连上 WebSocket 或调通 setOption,而是当 12 个图表共用一个 socket 实例、每个图表有自己的刷新节奏、用户随时拖拽缩放、网络在凌晨三点抖动两秒——这时候,哪条数据该丢、哪条必须重试、哪个图表该降级为缓存、哪个该黑屏保底,全靠这些细节点撑住。










