找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

57

积分

0

好友

4

主题
发表于 7 天前 | 查看: 35| 回复: 0
68747470733a2f2f63646e2e616666696e652e70726f2f4769746875625f6865726f5f696d616765312e706e67.webp

写在前面

你有没有遇到过这些烦恼:Notion经常卡顿加载,Miro的数据不知道存在哪,想要个完全属于自己的知识管理系统?

今天分享的AFFiNE,就是为了解决这些问题而生的。


什么是AFFiNE

AFFiNE是一个开源工作空间,把文档编辑、白板绘图、数据库管理三个功能合在一起。

最大亮点是本地优先——数据存在你自己电脑上,断网也能用,联网后自动同步。

这个项目在GitHub上线不到3年,现在已经有58.3k个星标,社区很活跃。


技术架构

双语言开发模式

前端用TypeScript + React写业务逻辑,性能关键部分用Rust实现,通过WASM连接。

TypeScript + React课程https://yunpan.plus/t/71-1-1

这样做的好处是开发效率和运行性能都能兼顾。

自研编辑器BlockSuite

团队没有直接用现成的编辑器框架,而是自己开发了BlockSuite引擎。

核心设计理念是:同一份数据可以用两种方式展示。

  • 文档模式:传统的上下滚动排版
  • 白板模式:自由拖放的画布布局

所以你能把文档里的内容直接拖到白板上,反过来也可以。

CRDT协同算法

多人同时编辑时如何避免冲突?AFFiNE用的是CRDT(无冲突复制数据类型)方案。

传统方案需要服务器做仲裁,必须联网。CRDT可以在本地计算,离线状态下也能正常工作。

底层基于Y.js实现,配合浏览器的IndexedDB存储。


项目结构

AFFiNE/
├── blocksuite/       # 编辑器引擎
├── packages/
│   ├── frontend/     # Web应用
│   ├── backend/      # 服务端
│   └── native/       # 桌面客户端
├── tests/            # 测试代码
└── tools/            # 开发工具

采用Monorepo架构,用Yarn Workspace管理多个子项目。


值得关注的设计

插件系统

类似VSCode的扩展机制,开发者可以贡献新的Block类型。

比如有人想加个思维导图功能,就可以写个插件实现。

性能优化

白板上可能有成百上千个元素,怎么保证流畅?

答案是用四叉树做空间索引:

  • 把画布分成网格
  • 只渲染屏幕上看得见的部分
  • 拖动时动态加载其他区域

灵活的部署方式

提供三种使用方式:

  1. 直接用官方云服务
  2. Docker一键部署到自己服务器
  3. 完全私有化部署(配置自己的数据库)

从零门槛到完全掌控,用户可以根据需求选择。


快速上手

本地开发

git clone https://github.com/toeverything/AFFiNE.git
cd AFFiNE
yarn install
yarn dev

浏览器打开 http://localhost:3000 就能看到效果。

生产部署

官方提供Docker镜像,配合Postgres数据库使用:

services:
  affine:
    image: ghcr.io/toeverything/affine:stable
    ports: ["3000:3000"]
    volumes: ["./data:/app/data"]

所有数据都在你自己的服务器上。


适合谁用

个人用户:管理笔记、写日记、规划项目

团队协作:共同编辑文档、头脑风暴、任务看板

开发者:学习编辑器引擎设计、CRDT算法实现

企业:私有化部署,满足数据安全合规要求


和同类产品的对比

Notion主要是云端应用,离线功能受限。

Miro专注白板,文档编辑比较弱。

Airtable数据库很强,但编辑体验一般。

AFFiNE把三者的功能整合在一起,加上本地优先的特性。

当然功能成熟度还在追赶阶段,毕竟项目比较年轻。


技术栈总结

前端:React 18 + TypeScript + Jotai

编辑器:BlockSuite(自研)

协同:Y.js (CRDT)

构建:Vite + Turborepo

后端:Node.js + Rust

数据库:Postgres + IndexedDB

桌面端:Electron / Tauri


写在最后

AFFiNE想做的是一个"操作系统级"的知识管理工具。

从技术角度看,它体现了几个趋势:

  • 本地优先替代纯云端
  • Rust+TS混合开发
  • Monorepo管理复杂项目
  • 自托管成为产品优势

对前端开发者来说,这是个不错的学习案例——从编辑器引擎到协同算法,从构建优化到跨平台方案,涉及大型项目的各个技术环节。


关注《云栈大前端》,分享更多开源项目解析


项目资源

GitHub仓库https://github.com/toeverything/AFFiNE

官方网站https://affine.pro

在线体验https://app.affine.pro

文档中心https://docs.affine.pro

前端全栈课程https://yunpan.plus/t/71-1-1


标签:#AFFiNE #GitHub #开源项目 #知识管理 #协作工具 #Rust #TypeScript #LocalFirst

来自圈子: 云栈大前端
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-11-5 18:51 , Processed in 0.076861 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表