macOS 性能与稳定性

口径说明

融云公开文档不覆盖 macOS 原生 SDK 与桌面交付链(dmg / 代码签名 / 公证 / 分发 / Gatekeeper);本页为本项目按 Apple 与 Electron 官方实践补齐的接入文档。

桌面端性能的关键指标是冷启动时间、首屏会话可用时间、长列表滚动帧率与长时间运行的内存 / 连接稳定性。以下预算按 1280×800、1000 会话 / 10 万消息的常见规模给出,用于回归对照。

性能预算​

指标目标测量方式
冷启动到窗口可见≤ 1.5 s(M1)/ ≤ 2.5 s(Intel)主进程 `app.whenReady` 到 `win.once("ready-to-show")`
首屏会话可用≤ 800 ms(本地库读)`getConversationList` 返回耗时
会话列表滚动≥ 55 FPSDevTools Performance 录制
打开会话历史≤ 300 ms(本地 50 条)`getHistoryMessages` 返回耗时
发送到气泡上屏≤ 100 ms(本地乐观更新)点击发送到 `appendIncoming` 渲染
常驻内存≤ 400 MB(1000 会话 / 10 万消息)活动监视器 / `process.getProcessMemoryInfo()`
长稳24 h 无崩溃、无内存持续增长脚本定时收发 + 内存采样

优化点​

环节做法
启动主进程并行初始化本地库与窗口;首屏只读 50 条会话,其余懒加载
IPC批量传输(一次传一页消息),避免逐条 `send`;大对象只传必要字段
本地库会话/消息复合索引;批量事务写入;定期 `ANALYZE` / `VACUUM`
渲染长列表虚拟滚动;气泡组件复用;图片懒加载 + 缩略图
事件消息事件按帧合并(16ms 批量 update),避免每来一条就整表重渲染
重连SDK 自动指数退避;UI 只展示状态,不自行轮询重连

稳定性检查清单​

  • 断网 30 秒后恢复:连接自动恢复,离线消息补齐且不重复。
  • 系统休眠 2 小时后唤醒:连接恢复,未读数与游标正确。
  • 强制退出后重启:本地历史仍在,未发送消息标记为失败可重发。
  • 多窗口同时打开:消息与未读在各窗口一致,无重复渲染。
  • 连续运行 24 小时:内存无持续增长,SQLite WAL 不无限膨胀。

压力与弱网​

Shell
# 弱网模拟(Network Link Conditioner 或 pfctl)
# 丢包 5% / 延迟 200ms 下验证:重连、补发、去重、未读
# 大量消息:脚本灌入 1 万条历史,验证首屏与滚动
# 连接抖动:每分钟断网 5 秒,持续 1 小时,观察内存与日志