搜索服务高级概述(已归档)

SearchService 是 Firefox 浏览器中管理搜索引擎的核心组件。

下图是 SearchService 的高级系统上下文图。该图说明了哪些系统与 SearchService 交互,以便它能够完成管理搜索引擎的任务。

该图和描述是对 SearchService 职责的简化。它特别强调了 SearchService 如何在启动时为浏览器提供搜索引擎。但是,SearchService 还有许多其他职责,这些职责在图中未列出,例如在各种项目发生更改时维护和管理搜索引擎,例如用户的区域或语言环境、从远程设置接收到的配置更改、搜索引擎数据接收到的更新。尽管如此,该图还是对 SearchService 最常交互的主要组件进行了广泛的概述。

../../_images/search-service-diagram-1.png

图的描述

以下步骤与图中的编号相同。图中的编号 1 在下面的编号 1 中进行了描述。

  1. 当用户打开 Firefox 浏览器时,代码开始构建浏览器 UI 组件。在此启动阶段,我们有各种系统调用 SearchService。例如,browser.js 调用 Services.search.getDefault 来获取默认搜索引擎。

  2. SearchService 需要来自 System Add-onsSearchSettingsRemote 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-onsSearchSettingsRemote Settings 收集搜索引擎数据。现在,SearchService 可以构建不同类型的搜索引擎了。

  3. SearchService 通过创建 搜索引擎 的新实例来创建新实例,方法是创建 附加组件、Open Search 或企业策略搜索引擎

  4. SearchService 将引擎返回给请求它的调用方。例如,SearchService 将默认搜索引擎传递回 browser.js,即最初请求它的系统。

更新

此页面截至 2023 年 3 月 10 日更新。如果图或描述过时,请通过共享驱动器中的 Firefox Search > Search Service Documentation 文件夹或通过此链接 此处 访问 Search Service Diagram。欢迎大家贡献力量,使此页面保持最新状态。