FirstStartup

FirstStartup 是一个模块,在应用程序启动时由 Windows 安装程序调用,用于在第一个应用程序窗口出现之前初始化服务。

这对于以下情况很有用:

  • 一次性性能调整

  • 下载关键数据(修补程序、实验等)

阻止直到第一个应用程序窗口出现很重要,因为安装程序将显示一个进度条,直到发生这种情况。这提供了以下用户体验:

  1. 用户下载并启动 Windows Stub 安装程序。

  2. 在下载和安装应用程序时,进度条前进。

  3. 安装程序使用 --first-startup 调用应用程序。

  4. 应用程序窗口出现,安装程序窗口关闭。

总体而言,用户体验到非常快速的首次启动,通常会延迟到 UI 启动完成后的关键任务已经完成。

FirstStartup:使用示例

FirstStartup 模块的一个使用示例是调用 Normandy 客户端来下载一个实验,该实验将用于自定义 Firefox 显示的首运行页面。

在此示例中,首运行页面将基于安装程序提供的归因代码进行实验性加载。此流程如下所示:

  1. 用户点击包含归因 (UTM) 代码的下载链接。

  2. 下载页面提供一个自定义的 Windows Stub 安装程序,其中嵌入了相应的归因代码。

  3. 安装程序使用 –first-startup 标志调用 Firefox,这会阻止第一个窗口。

  4. Normandy 由 FirstStartup 运行,并下载可用实验或“配方”列表。

  5. 根据本地信息(例如操作系统平台和归因代码)评估和过滤配方。

  6. 找到一个与当前归因代码匹配的配方,并将相应的数据提供给首运行页面。

  7. FirstStartup 完成并解除阻塞,这会导致 Firefox 显示第一个窗口并加载相应的第一运行数据。

阶段列表

FirstStartup.NOT_STARTED

FirstStartup 模块尚未初始化(init() 函数尚未调用)。这是默认状态。

FirstStartup.IN_PROGRESS

FirstStartup.init() 已被调用,并且事件循环正在旋转。此状态将持续存在,直到所有启动任务完成或达到超时。

超时默认为 30 秒,但可以通过 first-startup.timeout 首选项进行配置,该首选项以毫秒为单位指定。

FirstStartup.TIMED_OUT

在启动任务完成之前已达到超时。

FirstStartup.SUCCESS

所有启动任务已成功完成,并且应用程序启动可以继续。

FirstStartup.UNSUPPORTED

不支持任何启动任务,并且 FirstStartup 已退出。