作为 HTTP header 或作为响应中的标记预加载资源之间的权衡是什么?

What are the trade offs between resource preload as a HTTP header or as a tag in the response?

因此预加载 https://w3c.github.io/preload/ 可以通过声明性标记定义为标签

<link rel="preload" href="/styles/other.css" as="style">

或作为 HTTP header

Link: <https://example.com/other/styles.css>; rel=preload; as=style

但这两者之间的取舍是什么?什么情况下应该使用标签,反之亦然?

好吧,这应该是显而易见的。如果在HTML中,则需要解析HTML。这发生在 after 解析 headers,因为你需要 headers 知道你首先解析 HTML(而不是,比如 image/jpegtext/plain).

这实际上会导致性能差异吗?与大多数性能问题一样,一般来说这很难说清楚。重点仍然是将 I/O 与执行分开,这对于两种方法都是正确的。

CDN 和代理通常使用 headers 进行各种访问优化和缓存。这显然比解析 HTML 便宜,所以也许我们会看到一些相关的建议 :) 例如,我可以想象一个代理在它之前启动基于 HTTP header 的预加载获取 HTTP header - 只需观察常见的模式,即什么样的请求通常意味着什么样的预加载。当预测合适时,它可以很好地消除获取它的延迟,特别是在 high-latency 连接和 long-running 请求时。