搜索服务高级概述(已归档)¶
SearchService
是 Firefox 浏览器中管理搜索引擎的核心组件。
下图是 SearchService
的高级系统上下文图。该图说明了哪些系统与 SearchService
交互,以便它能够完成管理搜索引擎的任务。
该图和描述是对 SearchService
职责的简化。它特别强调了 SearchService
如何在启动时为浏览器提供搜索引擎。但是,SearchService
还有许多其他职责,这些职责在图中未列出,例如在各种项目发生更改时维护和管理搜索引擎,例如用户的区域或语言环境、从远程设置接收到的配置更改、搜索引擎数据接收到的更新。尽管如此,该图还是对 SearchService
最常交互的主要组件进行了广泛的概述。
图¶
图的描述¶
以下步骤与图中的编号相同。图中的编号 1 在下面的编号 1 中进行了描述。
当用户打开 Firefox 浏览器时,代码开始构建浏览器 UI 组件。在此启动阶段,我们有各种系统调用
SearchService
。例如,browser.js 调用Services.search.getDefault
来获取默认搜索引擎。SearchService
需要来自System Add-ons
、SearchSettings
和Remote Settings
的信息,才能以正确的顺序构建正确的引擎,并将引擎列表返回给调用方。a) 首先,
SearchService
请求搜索配置。SearchService
调用 SearchEngineSelector.fetchEngineConfiguration,后者调用 远程设置 以获取搜索配置。远程设置在启动时不会从远程数据库中获取搜索配置。相反,远程设置尝试从其本地数据库加载 搜索配置转储文件,如果该文件为空,则会将转储文件加载到其本地数据库中。只有在启动后,远程设置才会在必要时连接到远程数据库。通过在启动后连接,可以避免可能延迟启动的潜在网络请求。b) 其次,
SearchService
从 SearchSettings 中获取 JSON 文件。此 JSON 文件包含存储在用户计算机上的搜索引擎元数据。它包含的信息有助于SearchService
记住用户为搜索引擎自定义的设置。c) 第三,系统附加组件 将扩展数据传递给
SearchService
。此时,SearchService
仅安装用户安装的搜索扩展。对于应用程序提供的引擎,我们会在SearchService
调用 _makeEngineFromConfig 时创建这些引擎。然后_makeEngineFromConfig
将创建一个新的AddonSearchEngine
。当调用 AddonSearchEngine.init 方法时,它会将扩展和搜索配置数据组合起来,根据语言环境、区域和其他信息为用户创建正确的引擎。在步骤 2a、2b 和 2c 之后,
SearchService
已完成从System Add-ons
、SearchSettings
和Remote Settings
收集搜索引擎数据。现在,SearchService
可以构建不同类型的搜索引擎了。SearchService
通过创建 搜索引擎 的新实例来创建新实例,方法是创建 附加组件、Open Search 或企业策略搜索引擎。SearchService
将引擎返回给请求它的调用方。例如,SearchService
将默认搜索引擎传递回browser.js
,即最初请求它的系统。
更新¶
此页面截至 2023 年 3 月 10 日更新。如果图或描述过时,请通过共享驱动器中的 Firefox Search > Search Service Documentation
文件夹或通过此链接 此处 访问 Search Service Diagram
。欢迎大家贡献力量,使此页面保持最新状态。