文章索引

本地优先软件笔记:数据先是你的,然后才是云的

· 2 分钟

本地优先软件笔记:数据先是你的,然后才是云的

十几年来我们默认接受了一件奇怪的事:想打开自己写的文档,得先问过别人家的服务器。本地优先(local-first)这个词给出的答案很直接,把事实源搬回用户设备,让云降级成可选的同步通道。

七条理想,一条主线

Ink & Switch 那篇著名的论文列了七条理想属性:快、多端、离线可用、协作、长期可用、隐私、用户掌控。七条背后其实是同一条主线:

软件的可用性不应该依赖任何一台不属于用户的机器。

拿这条主线去审视手头的工具,结果往往难看。断网之后还能正常工作的应用,一只手数得过来。

架构上的翻转

传统云应用的读写路径是「客户端请求服务器,服务器返回真相」。本地优先把它翻转过来:

  1. 所有读写先落在本地存储,界面永远即时响应
  2. 后台任务把变更同步出去,网络状态只影响同步进度
  3. 冲突由数据结构自己消化,而不是弹窗让用户二选一

第三条是技术上最难的部分,也是 CRDT 这些年从论文走向工程的原因:把「并发修改如何合并」的规则编码进数据类型本身,合并结果与操作顺序无关。

博客也算一种本地优先

这个站点本身就是一次小规模实践。文章是我磁盘上的 Markdown 文件,Git 仓库是完整的历史,任何托管商消失都不影响我拥有全部数据。构建产物是纯静态文件,换一家托管只是改一个部署目标。

云在这套流程里的角色被压缩到最小:一个远端备份,一个分发节点。它很有用,但它不是主人。

值得追踪的方向

  • 浏览器端持久化能力的演进,OPFS 已经够用了
  • CRDT 库的工程化成熟度,尤其是文本与富文本类型
  • 端到端加密与同步服务的组合方式

本地优先不是复古,而是把三十年前个人计算的默认假设,用今天的同步技术重新实现一遍。