FirstStartup¶
FirstStartup
是一个模块,在应用程序启动时由 Windows 安装程序调用,用于在第一个应用程序窗口出现之前初始化服务。
这对于以下情况很有用:
一次性性能调整
下载关键数据(修补程序、实验等)
阻止直到第一个应用程序窗口出现很重要,因为安装程序将显示一个进度条,直到发生这种情况。这提供了以下用户体验:
用户下载并启动 Windows Stub 安装程序。
在下载和安装应用程序时,进度条前进。
安装程序使用
--first-startup
调用应用程序。应用程序窗口出现,安装程序窗口关闭。
总体而言,用户体验到非常快速的首次启动,通常会延迟到 UI 启动完成后的关键任务已经完成。
FirstStartup:使用示例¶
FirstStartup
模块的一个使用示例是调用 Normandy 客户端来下载一个实验,该实验将用于自定义 Firefox 显示的首运行页面。
在此示例中,首运行页面将基于安装程序提供的归因代码进行实验性加载。此流程如下所示:
用户点击包含归因 (UTM) 代码的下载链接。
下载页面提供一个自定义的 Windows Stub 安装程序,其中嵌入了相应的归因代码。
安装程序使用 –first-startup 标志调用 Firefox,这会阻止第一个窗口。
Normandy 由
FirstStartup
运行,并下载可用实验或“配方”列表。根据本地信息(例如操作系统平台和归因代码)评估和过滤配方。
找到一个与当前归因代码匹配的配方,并将相应的数据提供给首运行页面。
FirstStartup
完成并解除阻塞,这会导致 Firefox 显示第一个窗口并加载相应的第一运行数据。
阶段列表¶
FirstStartup.NOT_STARTED
FirstStartup
模块尚未初始化(init()
函数尚未调用)。这是默认状态。
FirstStartup.IN_PROGRESS
FirstStartup.init()
已被调用,并且事件循环正在旋转。此状态将持续存在,直到所有启动任务完成或达到超时。超时默认为 30 秒,但可以通过
first-startup.timeout
首选项进行配置,该首选项以毫秒为单位指定。
FirstStartup.TIMED_OUT
在启动任务完成之前已达到超时。
FirstStartup.SUCCESS
所有启动任务已成功完成,并且应用程序启动可以继续。
FirstStartup.UNSUPPORTED
不支持任何启动任务,并且 FirstStartup 已退出。