logo
mdocs
首页
特性
开始
文档
GitHub
首页
特性
开始
文档
GitHub
logo
mdocs

快速开始

安装
第一个知识库

核心概念

所见皆文件
域隔离
文档级邀请
无账户身份识别

使用指南

设置页面概览
Markdown 编辑
流程图生成
草稿与同步
我的文章与邀请
文档收藏
文档评论
受限域成员与模板
CLI Token
恢复码与身份找回

部署与配置

环境要求
配置文件
反向代理示例
FAQ
更新日志
Previous Page流程图生成
Next Page我的文章与邀请
mdocs

Write freely. Never lose a word.

MIT License
产品
功能特性竞品对比更新日志
资源
文档安装指南
社区
GitHub问题反馈
© 2026 mdocs · Made with ♥ by xuhuafeifei

#草稿与同步

#设计意图

编辑环境中存在一个天然矛盾:用户希望内容「随时保存,永不丢失」,但网络可能不稳定,服务器可能暂时不可用。mdocs 用本地优先 + 按需发布的草稿机制来解决这个问题。

#架构

用户编辑
    │
    ▼
Lexical 编辑器(富文本)
    │
    ├── 自动保存(1000ms 防抖)──────────────────┐
    │       │                                    │
    │       ▼                                    │
    │   IndexedDB(浏览器本地数据库)               │
    │   存储:正文 + 开编 commit(localBaseCommitId)│
    │                                              │
    ├── 自动发布(空闲 30 秒后)───────────────────┤
    │       │  (每 10 秒扫描一次)                  │
    │       ▼                                    │
    │   后端 API(更新正文 + 提交图)              │
    │                                              │
    ├── 手动「发布」──────────────────────────────┤
    │                                              │
    └── 失焦 / 切换标签页 ────────────────────────┘
             立即保存当前内容

#本地数据分工(v0.7.9+)

数据作用
IndexedDB 草稿未发布正文、标题、开编时的 localBaseCommitId
activeDocMeta(内存)当前打开这篇的服务端元信息(权限、路径、owner、当前 head 等),供界面共用;不含正文
编辑器显示与编辑正文;有草稿时以草稿为准,无草稿时以服务器 GET 为准

打开文档时:一定会请求服务器更新 meta;正文则 有草稿读草稿、无草稿读服务器,二者互斥,不会把两套正文混在一个对象里。

#三层保存策略

触发时机保存目标说明
编辑后 1 秒无操作IndexedDB防抖,避免频繁写入
编辑器失焦(blur)IndexedDB切换到其他元素时立即保存
标签页隐藏(visibilitychange)IndexedDB用户切走或关闭标签时保底

补充说明:

  • 首次编辑时才创建草稿(不是打开文档就创建)。
  • 首次落盘会记录 localBaseCommitId(开编时服务端 head)。
  • 后续自动保存只更新正文和标题,不重置开编基准。

#发布流程

#自动发布(可选)

在 设置 中开启「自动同步至云端」后:

  • 每 10 秒扫描 IndexedDB;
  • 某篇草稿 超过 30 秒 没有新的自动保存 → 尝试发布。

#手动发布

  1. 点击「发布」
  2. 编辑器内容序列化后 PUT 到服务器(带开编 commit 做版本校验)
  3. 成功后:删除本地草稿 → 再 GET 拉取最新 → 更新界面 meta 与编辑器(与服务器对齐)

#无草稿也能发布

若打开后尚未触发自动保存(尚无 IndexedDB 草稿),仍可直接发布:内容以编辑器为准,版本号以当前 meta 中的 head 为准。

#发布失败

无论自动还是手动,失败时草稿一般仍保留在本地。

情况行为
任意自动发布失败(v0.8.5+)草稿标记 publishError,停止自动重试;设置页「未发布草稿」显示失败原因;手动点「发布」会先清除标记再重试
缺少版本基准多见于旧版创建的目录描述(___desc___.md);升级到 0.8.5+ 并重启服务后重新打开该目录可恢复;或删除本地草稿
自动发布 404服务端文档已删、本地仍有草稿;可 另存为新文档
409 版本冲突进入 版本冲突与合并 流程

重新打开文档且服务端已有 headCommitId 时,会自动补写草稿的 localBaseCommitId 并清除「缺版本基准」类失败标记。

#断网场景

  • 断网时:继续编辑,草稿在 IndexedDB
  • 重新打开:有草稿则恢复草稿正文;meta 仍会从服务器 GET(需联网)

#拉取更新(Pull)

  • 无未发布草稿:可拉取远端最新正文与 meta。
  • 有未发布草稿:不覆盖式 pull,避免误盖本地副本。

#设计取舍

  • 本地优先:编辑不依赖网络;恢复后自动或手动发布
  • 发布后强制对齐:删草稿 + GET,减少「单用户自动发布后又冲突」的困惑
  • IndexedDB:容量大、异步,不阻塞 UI