线上撤销/重做延迟 — 为什么 Ctrl+Z 感觉反应慢
为什么线上撤销有延迟
Drawpile 的多人协作架构是客户端-服务器模型:
- 你在本地 Ctrl+Z → 撤销命令
- 客户端把这个命令发送给服务器
- 服务器检查命令是否合法(你有没有权限、撤销是否有效)
- 服务器广播撤销结果给所有在线用户
- 你的客户端收到服务器的确认 → 撤销才真正生效
所以线上撤销的延迟 = 你到服务器的往返时间(RTT) + 服务器处理时间 + 服务器广播时间。
| 网络条件 | 典型延迟 |
|---|---|
| 本地局域网(同一 WiFi) | < 10ms(几乎感觉不到) |
| 国内运营商 + 社区服务器(海外) | 50-150ms |
| 跨洋(中国 ↔ 美国社区服务器) | 150-300ms |
| 移动 / 卫星网络 | 300-1000ms+(很明显) |
自己画的东西能不能立刻撤销?
Drawpile 优化了自己笔触的撤销——你自己刚画的东西,本地客户端可以立即预览撤销效果,不用等服务器确认。服务器的确认只是后续同步给其他人。
所以你会发现:撤销自己画的东西 → 几乎没延迟(本地立即预览);撤销别人画的东西 → 明显延迟(必须等服务器)。
为什么别人撤销了我之后就不能撤销了?
这是 Drawpile 多人架构的设计——每个用户有独立的撤销栈。你只能撤销你自己画的笔触,不能撤销别人的。如果别人先画了几笔,你后面又画了——你可以撤销自己最后画的那几笔,但不能撤销中间别人画的。
这和 Miro、Figma、Excalidraw 等其他协作白板/绘图工具的行为一致:各自撤销各自的操作。
要撤销别人的操作:只能让对方自己 Ctrl+Z、或者让 Operator 用 Force Undo(见 强制撤销)。
怎么减少线上延迟
选离自己近的社区服务器
Drawpile 官方维护了:
- pub.drawpile.net(北美)
- pub.eu.drawpile.net(欧洲)
- pub.jp.drawpile.net(日本)
亚洲用户推荐选 pub.jp.drawpile.net 或者自建服务器放国内 VPS。
关闭不必要的稳定器
稳定器也会增加本地渲染延迟。多人会话里:
- 把全局 Smoothing 降到 20-30
- 关掉画笔独立稳定器或降到 20-30
用有线网而不是 WiFi
局域网内多人协作时尤其明显——有线网 RTT < 1ms,WiFi 可能 5-20ms。
关闭预览、洋葱皮等实时功能
这些功能会抢 CPU,导致响应变慢。多人会话时关掉不需要的面板,保持界面简洁。
延迟 vs 带宽
Drawpile 同步的是操作命令不是位图——带宽压力非常小(每秒几 KB 到几十 KB 而已)。所以:
- 关键是延迟(RTT),不是带宽
- 100Mbps 宽带如果 RTT 到美国 200ms,延迟还是大
- 10Mbps 但 RTT < 20ms,体验反而更流畅
- 卫星网络、VPN、加速器可能反而增加 RTT(绕路了)