Firefox 网络调度和优先级

请注意,本文档是初稿,可能会进一步完善和更新。 适用于 Fx 132+

调度

Firefox 使用多种技术来协调网络请求调度。

DOM 预加载扫描器(推测加载器)

DOM 解析器(非推测)

  • 在构建 DOM 树时发出元素请求。

服务类别

优先级

由于 HTTP/1.1 没有优先级系统(顺序请求),Firefox 使用 supportsPriorityclassOfService 来排序请求。HTTP/2 和 HTTP/3 利用到每个主机的单个多路复用连接,因此由于带宽限制,请求优先级变得至关重要。优先级使用**可扩展优先级方案**表示,其中包括

  • **紧急程度**:范围从 0(最高优先级)到 7(最低优先级)。紧急程度数值较低的资源在紧急程度数值较高的资源之前交付。例如,所有紧急程度为 2 的资源都在紧急程度为 3 的资源开始传输之前传输。

  • **增量**:一个布尔值,指示是否应在此资源和相同紧急程度的其他资源之间分配带宽。增量标志确定相同紧急程度的资源是按顺序发送(i 不存在)还是增量发送(i)。

这些优先级是根据以下因素计算的

  • 资源类型及其在文档或视口中的位置。

  • 分配的 服务类别

  • 使用 SupportsPriority 接口。

  • 应用优先级提示(例如,fetchpriority="high"调整,通过 SupportsPriority 实现

  • 后台标签的优先级将降低。

资源调度和优先级表

资源类型 服务类别 supportsPriority 紧急程度 增量 备注
HTML,根文档 UrgentStart (64) PRIORITY_HIGHEST, -20 0 true
CSS (<head>,渲染阻塞) Leader (1) PRIORITY_NORMAL, 0 2 false
CSS (rel=preload) Leader (1) PRIORITY_HIGHEST, -20 0 false
CSS (Body) Leader (1) PRIORITY_NORMAL, 0 2 false
JavaScript(阻塞) Leader (1) PRIORITY_NORMAL, 0 2 false
JavaScript (rel=preload) Unblocked (16) PRIORITY_HIGHEST, -20 1 false
JavaScript(异步) TailAllowed (512), Unblocked (16) PRIORITY_NORMAL, 0 3 false
JavaScript(延迟) Unblocked (16) PRIORITY_NORMAL, 0 3 false
字体 @font-face TailForbidden (1024) PRIORITY_HIGH, -10 3 false 紧急程度受 TailForbidden CoS 影响
字体 (rel=preload) TailForbidden (1024), Unblocked (16) PRIORITY_HIGH, -10
fetchpriority=high: PRIORITY_HIGHEST, -20
fetchpriority=low: PRIORITY_LOW, 10
2
fetchpriority=high: 1
fetchpriority=low: 4
false
图像 (0) PRIORITY_LOW, 10
fetchpriority=high: PRIORITY_HIGH, -10
fetchpriority=low: PRIORITY_LOWEST, 20
5
fetchpriority=high: 3
fetchpriority=low: 6
true
图像 (rel=preload) (0) PRIORITY_LOW, 10
fetchpriority=high: PRIORITY_HIGH, -10
fetchpriority=low: PRIORITY_LOWEST, 20
4
fetchpriority=high: 3
fetchpriority=low: 5
true
即将渲染的图像 (0) PRIORITY_HIGH, -10 3 true 参见:image_layout_network_prioritybug 1915817
获取 (0) PRIORITY_NORMAL, 0
fetchpriority=high: PRIORITY_HIGH, -10
fetchpriority=low: PRIORITY_LOW, 10
4
fetchpriority=high: 3
fetchpriority=low: 5
false
跟踪器(脚本) Tail (256), Unblocked (16) PRIORITY_NORMAL, 0 3 false 请求被延迟,即由一个常数乘以挂起请求的数量延迟。