技术栈与兼容性说明
你可以在 StackShare 了解我们所使用的技术栈。
Univer SDK 兼容性
Univer SDK 是指 Univer 中以 TypeScript 编写,以 npm 包的形式发布的代码。Univer SDK 的编译目标是 Chrome 70,但这并不意味着 Univer 能够完全支持所有主流环境。我们会尽力确保 Univer 在以下浏览器和 Node.js 环境中能够正常运行:
Edge | Firefox | Chrome | Safari | Electron | Node.js |
---|---|---|---|---|---|
最近两年 | 最近两年 | 最近两年 | 最近两年 | 最近两年 | v18.17.0 及之后的版本 |
如果遇到无法兼容的情况,请先借助对应的 polyfill 来解决,如果仍然无法解决,请提交 issue。
SDK 技术栈
工具 | 说明 |
---|---|
TypeScript | SDK 代码完全由 TypeScript 编写,极大地提升了代码可维护性的同时也提升了用户的开发体验。我们使用 typedoc 生成详细的 API 查询手册。我们会定期更新到最新的 TypeScript 版本。 |
redi | 我们团队自行开发的轻量且强大的依赖注入工具。Univer SDK 使用 redi 来管理内部成百上千的模块,使得代码更容易组织和维护。 |
Canvas | Univer 使用 Canvas 来渲染文档内容,通过一系列优化极大提升了大文档的性能表现。 |
React | 我们使用 React 来构建除了文档内容之外的用户界面,诸如工具栏、浮动面板、侧边栏和右键菜单等等。我们支持 16.8.0 及之后版本的 React。 |
TailwindCSS, Radix | 我们正逐步迁移到 TailwindCSS 和 Radix 以让我们的组件和样式系统能够更加容易定制。我们会持续到最新的版本。 |
RxJS | RxJS 是我们在代码库中实现反应式编程模式的默认解决方案。我们目前支持 RxJS 7.0.0 及以上版本。 |
Decimal.js, numfmt | 我们在公式引擎中使用这两个库来解决计算精度和数字格式的问题。 |
Vitest, Playwright | 我们专注于通过自动化来确保代码质量。我们使用 vitest 进行单元测试和集成测试,使用 playwright 进行 e2e 测试和 vasual 比较测试。 |
Operational Transformation | 我们使用操作转换来处理并发编辑。我们自研了协同编辑引擎和冲突解决算法。 |
json1 | 我们在协同模块当中的一部分使用了 json1,主要用于 Univer 文档和幻灯片。 |
Univer 服务端技术栈
工具 | 说明 |
---|---|
Go, Python, NestJS, Node.js | Golang 在处理高并发和快速网络 I/O 方面表现出色,让 Univer 协作引擎可以轻松处理大量的客户端连接请求;Python 是目前最流行的 AI 应用开发语言,借助 Python,我们可以采用前沿的框架,快速开发我们的 AI 应用;Node.js 使得我们可以在服务端使用 Univer SDK,让用户能以一套 API 在两个端编写业务逻辑,同时还支持服务端计算、服务端渲染、解决协同编辑冲突等特色功能。 |
Kubernetes, Docker Compose | 我们的目标是在部署灵活性和易用性之间取得平衡,使客户能够快速启动并开始在系统中集成。为了满足客户的多样化需求,我们同时支持 Kubernetes 和 Docker Compose。 |
PostgreSQL, Redis, RabbitMQ | 我们的主要存储层组件。 |
Autogen, Langchain | 我们基于 Autogen 构建了灵活和复杂的 AI 工作流。借助 Langchain 活跃的生态链,我们快速开发了丰富、实用和有趣的 AI 功能。 |
Sentry | 我们使用 Sentry 收集系统中的错误,以便我们能持续跟进和处理它们。 |
Prometheus, Grafana, Jaeger, Loki | 我们主要的系统观测工具。 |
gRPC, Protobuf | 服务之间主要采用 gRPC 作为传输协议,并基于 protoful 文件自动生成不同编程语言的类型定义,以确保全局的一致性。 |
研发工具
工具 | 说明 |
---|---|
GitHub | Univer 团队的工作围绕 GitHub 进行,包括项目管理、质量管理、代码评审以及版本管理。我们的工程师在 GitHub Actions 上创建了大量的流水线任务,包括单元测试(包含测试覆盖率检查)、集成测试、端到端测试、内存泄露测试,性能测试、自动化部署等等,这些工具使得我们能够在快速迭代的同时保持代码质量。 |
Coder | 我们基于 Coder 打造了云端开发环境,并基于 Istio 开发了我们自己的流量染色和路由分发系统,使得我们的工程师能够方便地进行系统集成和测试,极大地提升了我们的需求研发和缺陷修复速度。 |
Artillery | 性能测试的主要工具。 |