为什么 Odoo 选择自行开发 OWL 猫头鹰 Javascript 框架

为什么 Odoo 选择自行开发 OWL 猫头鹰 Javascript 框架
最新回答
岁月无忧

2026-10-26 00:50:31

Odoo 选择自行开发 OWL 猫头鹰 Javascript 框架的原因:

Odoo 选择自行开发 OWL(Owl Web Library)Javascript 框架,主要是基于其独特的业务需求和技术考量。以下是对这一决策背后原因的详细阐述:

1. 极端模块化需求

  • Odoo 的核心部分在运行时之前无法预知将加载或执行哪些文件,或 UI 的具体状态。
  • 因此,Odoo 无法依赖标准的构建工具链,需要动态按需构建,这与 React 等框架的提前构建方式不同。
  • Odoo 必须保持高度的通用性,以生成动态用户界面,这是绝大多数现有框架无法完成的任务。

2. 控制技术与避免依赖

  • Odoo 希望控制自己的技术栈,避免依赖 Facebook、Google 等大型公司的技术决策。
  • 使用第三方框架可能面临许可证变更、发展方向不符等风险。
  • Odoo 的需求与大多数其他应用程序可能完全不同,因此自行开发框架更为合适。

3. 类组件与继承的重要性

  • 尽管主流框架正在逐渐远离类组件,但 Odoo 认为类和继承是重要的工具。
  • 继承有助于在通用组件之间共享代码,是 Odoo 构建 Web 客户端的重要方式。
  • 类的每个方法都为插件提供了扩展点,便于外部行为的增加。

4. 工具链的复杂性

  • React 和 Vue 拥有庞大的社区和丰富的工具链,但对 Odoo 来说却是一个问题。
  • Odoo 的资产是动态的,且随着用户安装或移除插件而不断变化,需要在生产服务器上拥有所有相关工具。
  • OWL 旨在简化这一过程,通过浏览器编译模板,减少强制性工具的使用。

5. 基于模板的需求

  • Odoo 将模板作为 XML 文档存储在数据库中,这允许使用 xpath 进行定制。
  • 主流框架通常不使用 XML 存储模板,因此 Odoo 需要制作模板编译器来支持 React 或 Vue。
  • 这不仅复杂且可能对开发人员体验产生负面影响。

6. 开发人员经验

  • Odoo 希望使入职开发人员尽可能容易地适应工作环境。
  • 许多非 JS 专家对前端世界感到困惑,OWL 试图提供一个简单而熟悉的 API。
  • OWL 使用类、显式的反应系统和明显的范围规则,使经验丰富的开发人员感到熟悉。

7. JIT 编译的需求

  • 前端世界存在提前编译代码的趋势,但 Odoo 需要 JIT(Just-In-Time)编译。
  • Odoo 从数据库中获取模板,并仅在最后一刻进行编译,以应用所有必要的 xpath。
  • OWL 支持在运行时生成和编译模板,满足 Odoo 的需求。

8. 反应系统的灵活性

  • Odoo 认为其他框架中的反应系统不是最佳选择。
  • Vue 的反应系统虽然不错,但并非真正可选。
  • OWL 提供了更灵活的反应系统,允许在需要时退出反应性。

9. 并发模式的优势

  • Odoo 希望获得不同的用户体验,在异步操作执行时不显示微调框。
  • OWL 提供了并发模式,允许 UI 在内存中呈现,并在准备就绪时显示。
  • React 的并发模式在 OWL 启动时还未准备好,且使用起来复杂;Vue 没有等效的 API。

综上所述,Odoo 选择自行开发 OWL 框架是出于其独特的业务需求和技术考量。OWL 框架能够更好地满足 Odoo 的模块化、控制技术、基于模板、开发人员经验、JIT 编译、反应系统灵活性以及并发模式等方面的需求。