b612咔叽鸿蒙版
217.26M · 2025-10-31
hi, 大家好, 我是徐小夕.
之前和大家分享了我实现的 pxcharts 多维表格技术方案:
半年时间,写了一款多维表格编辑器pxcharts
pxcharts-pro, 支持百万数据渲染的多维表格编辑器
最近研究了在线协同功能,花了大概半年时间,研究文档引擎和协同算法,最近终于实现了一个毫秒级文档协同编辑器,媲美企业级协同应用,接下来就和大家分享一下这款文档编辑器。
演示地址:px-doc 协同文档编辑器
上面是我整理的一个协同方案实现的核心逻辑层,目前我采用CRDT的方案来实现,这里就简单和大家聊聊CRDT算法的作用:
(当然协同方案也可以采用OT算法架构来实现)接下来我们再来聊聊我做的协同文档编辑器。
我在协同文档编辑器中实现了非常复杂的功能,比如可视化图表,音视频组件,移动端适配,版本管理等:
由于国内企业用Vue的比较多,所以文档编辑器我采用了Vue3的实现方案,当然React也能实现同样的协同能力。
@/utils/req)
系统采用“前后端分离 +CRDT 实时协同 + 文件持久化”的轻量架构:
src/main.js → 挂载 App.vue,引入路由、Pinia、样式。src/router/index.js,基于 localStorage.uid 的简易登录态;未登录跳转 login。src/views/doc-page/doc-page.vue(Notion 风格),集成协同逻辑、版本面板。src/components/VersionManager.vue,支持版本列表、预览、恢复、删除与信息编辑。websocket 与服务器保持实时同步。server/db/document/documents.jsonserver/db/version/<docId>.json.crdt 文件持久化(CRDT 序列化),提升容灾与重启恢复能力。px-editor/(vite.config.js 中 build.outDir)。BASE_API_URL/BASE_WS_URL 切换接口与协同服务地址。接下来就我实现的文档协同编辑器,总结以下几点优势:
/parse/doc2html2 与 /parse/pdf2html 的上传/分页获取接口。整个编辑器我采用模块化的开发方式,我们可以轻松采用组件化的方式集成到系统中。
src/
api/# 文档/版本/文件解析等接口封装
components/# 版本面板等复用组件
packages/# 编辑器核心与扩展(core/vue3)
router/# 路由与守卫
stores/# Pinia 状态(示例)
styles/# 全局样式(Sass + UnoCSS)
utils/# 请求封装、工具函数
views/# 页面(login / doc-page)
关键文件:
src/main.js应用入口,注册 Pinia、Router。src/router/index.js路由表与鉴权守卫。src/api/document.ts、src/api/version.ts、src/api/file.ts:HTTP API 封装。src/packages/vue3/editor.js、src/packages/core/*:编辑器与扩展能力。src/components/VersionManager.vue版本列表、预览与恢复。pnpm install
2. 启动前端(默认 http://localhost:9999)
pnpm dev
3. 启动服务端(示例,按你的实际脚本为准)
npm start
# 或 Windows: npm run start:win
演示地址:px-doc 协同文档编辑器
后续我会持续迭代协同文档编辑器,并持续优化性能和功能,大家有好的想法也欢迎随时交流反馈.