Drawpile 中文文档 下载 App

线上撤销/重做延迟 — 为什么 Ctrl+Z 感觉反应慢

为什么线上撤销有延迟

Drawpile 的多人协作架构是客户端-服务器模型:

  1. 你在本地 Ctrl+Z → 撤销命令
  2. 客户端把这个命令发送给服务器
  3. 服务器检查命令是否合法(你有没有权限、撤销是否有效)
  4. 服务器广播撤销结果给所有在线用户
  5. 你的客户端收到服务器的确认 → 撤销才真正生效

所以线上撤销的延迟 = 你到服务器的往返时间(RTT) + 服务器处理时间 + 服务器广播时间。

网络条件典型延迟
本地局域网(同一 WiFi)< 10ms(几乎感觉不到)
国内运营商 + 社区服务器(海外)50-150ms
跨洋(中国 ↔ 美国社区服务器)150-300ms
移动 / 卫星网络300-1000ms+(很明显)

自己画的东西能不能立刻撤销?

Drawpile 优化了自己笔触的撤销——你自己刚画的东西,本地客户端可以立即预览撤销效果,不用等服务器确认。服务器的确认只是后续同步给其他人。

所以你会发现:撤销自己画的东西 → 几乎没延迟(本地立即预览);撤销别人画的东西 → 明显延迟(必须等服务器)。

为什么别人撤销了我之后就不能撤销了?

这是 Drawpile 多人架构的设计——每个用户有独立的撤销栈。你只能撤销你自己画的笔触,不能撤销别人的。如果别人先画了几笔,你后面又画了——你可以撤销自己最后画的那几笔,但不能撤销中间别人画的。

这和 Miro、Figma、Excalidraw 等其他协作白板/绘图工具的行为一致:各自撤销各自的操作。

要撤销别人的操作:只能让对方自己 Ctrl+Z、或者让 Operator 用 Force Undo(见 强制撤销)。

怎么减少线上延迟

选离自己近的社区服务器

Drawpile 官方维护了:

亚洲用户推荐选 pub.jp.drawpile.net 或者自建服务器放国内 VPS。

关闭不必要的稳定器

稳定器也会增加本地渲染延迟。多人会话里:

用有线网而不是 WiFi

局域网内多人协作时尤其明显——有线网 RTT < 1ms,WiFi 可能 5-20ms。

关闭预览、洋葱皮等实时功能

这些功能会抢 CPU,导致响应变慢。多人会话时关掉不需要的面板,保持界面简洁。

延迟 vs 带宽

Drawpile 同步的是操作命令不是位图——带宽压力非常小(每秒几 KB 到几十 KB 而已)。所以: