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 编译、反应系统灵活性以及并发模式等方面的需求。