firefox_OS.jpg

从前,浏览器比现在简单得多。浏览器是一个单一的操作系统进程,所有事情都在其中发生。这使得使用Accessibility Tree获取与用户界面和Web内容相关的辅助技术变得更加容易和高效。

然而,随着使用量和复杂性的增加,安全漏洞的风险也会增加。为了提高性能、稳定性和安全性,浏览器开始将不同的网页传输到不同的进程。为了进一步提高安全性,今天的浏览器还将把Web内容处理放在沙盒中,进一步减少访问权限。这意味着辅助技术比以前更难访问包含无障碍树的Web内容进程并将代码注入进程。无障碍环境的情况变得非常复杂。

Firefox浏览器的辅助功能引擎负责为屏幕阅读器和其他辅助技术提供访问web内容所需的信息。这些工具需要与浏览器交互,并对用户或相关网站的变化做出反应。如果浏览器由于速度慢或其他问题而延迟太多,使用Firefox访问网络上的内容将成为一种拖累。

尽管现有的无障碍引擎架构为Firefox提供了良好的服务,但在当前架构下,Firefox团队无法进一步提高速度,而且现有的无障引擎过于复杂,难以维护,存在严重的稳定性问题,需要在不同的操作系统上采用不同的实现。Firefox团队决定重建可访问性引擎,因此“缓存世界”项目应运而生。

这个项目的目标是让Firefox在与屏幕阅读器和其他辅助技术一起使用时更快,尤其是在Windows上。根据官方数据(下表提供了重构前后的时间对比),在新架构下,Firefox在多个场景中的速度都有了显著提高。

在新架构中,Firefox将可访问性树从每个Web内容进程异步推送到主UI进程。当辅助技术查询无障碍树时,所有查询都会从缓存中得到响应,而无需在Firefox进程之间进行任何调用。当页面更新时,内容进程异步地将缓存更新推送到主进程。速度的提高远远超出了Firefox团队的预期,并且与旧架构不同。现在他们可以完全控制缓冲区的更新模式和时间,因此仍有很大的空间来进一步提高Firefox的性能。至于代码维护,一旦完全发布,将有可能删除大约20000行代码,其中大部分是操作系统独有的。

Firefox Nightly中启用了新架构。如果一切顺利,Mozilla计划在2023年1月的Firefox 110测试版中为Windows和Linux用户启用该功能。之后,该功能将在Firefox 111或112中分阶段正式引入Windows和Linux用户。Mac版本需要更多的开发时间,因此将在稍后推出。