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 FPS | DevTools 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 小时,观察内存与日志