这不是一项一蹴而就的工程,Mozilla 开发者表示团队花费了大约两年的时间,采用“增量更新”的方式才逐渐将 Firefox UI 迁移至使用 Web Components 构建。

Mozilla 开发者 Brian Grinstead 在博客宣布,经过多年的努力,他已在几个星期前从 Firefox UI 中移除了 XBL,亦即意味着将 Firefox UI 迁移至使用 Web Components 构建的工程已完成。

XBL 是一种基于 XML 的语言,当我们要实现附加到 DOM 元素的“绑定”就需要使用 XBL。然后,我们还可以将自定义 JS 属性和匿名内容添加到常规元素。XBL 是在90年代末期为 NetScape 设计和构建的,除了 XBL,还有许多其他的“XUL”特性可帮助我们构建桌面 Web 应用 —— 比 Web 平台提供相似的功能早得多。

Firefox 大约有 300 个 XBL 绑定和 50000 行相关代码,主要都是被比较小型的部件使用(如<toolbarbutton label="Reload" />),以及用于管理应用程序(如<tabbrowser />,它通过管理标签在浏览器窗口中控制大部分状态,以及从内容页面接收消息等)。

我们可以将 Firefox UI 看作是一个非常大型的单页应用程序,最初采用 DOM 和 JS 构建,相对于 20 多年前的原生应用,它的技术选型十分大胆。也正因为 Mozilla 走得太超前 ,所以在 Web 平台尚未支持它们之前就自己实现了构建复杂 Web 应用所需的部分特性。这些特性在日后也逐渐演变成像 CSS flexbox 和 Web Components 这样的标准规范。

处于这种新老交替的时刻,让现有代码库继续使用原版本,并要求平台同时支持两者当然是最容易的,毕竟对旧代码进行重写十分困难而且成本巨大。

然而即便如此,Mozilla 还是选择在 Firefox 中实现 Web Components,他们启动了一个“并行”项目,在该项目中,团队将迁移现有的 UI 组件以使用它们。他们以“增量更新”的方式进行此操作,以便在保证 Firefox 正常运行的同时进行每个独立的更改,而不是从头开始创建一个分支来重写 UI。

Brian 认为这是一项重大的成就,也给 Firefox 的底层提供了改进,还允许团队可以将精力集中在现代 Web 标准上,并移除没有对外公开的大量重复和复杂的功能。

至于为什么要使用 Web Components,Brian 表示由于 XBL 存在的问题,多年来团队一直在讨论移除 XBL。但这项工程似乎十分庞大,并且看起来好像需要从头开始重写 Firefox UI,所以一直没能有效推动项目的进展。后来团队进行了“设计审查”,并提议启动“并行项目”计划,以实现采用“增量更新”的方式实现迁移的目标。由于两者的模型非常相似,因此开发者在迁移元素时能做出合理的选择,以尽可能保持 API 的兼容性。