作为 HTTP 标头或作为响应中的标记的资源预加载之间有何权衡?

Sim*_*mon 7 html http web-performance

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

<link rel="preload" href="/styles/other.css" as="style">
Run Code Online (Sandbox Code Playgroud)

或者作为 HTTP 标头

Link: <https://example.com/other/styles.css>; rel=preload; as=style
Run Code Online (Sandbox Code Playgroud)

但两者之间的权衡是什么?在什么情况下应该使用该标签,反之亦然?

Lua*_*aan 2

嗯,这应该是显而易见的。如果是在 HTML 中,则需要解析 HTML。这种情况发生在解析标头之后,因为您需要标头知道您首先正在解析 HTML(而不是,比如说,image/jpegtext/plain)。

这实际上会导致实践中的性能差异吗?与大多数性能问题一样,一般来说这是不可能判断的。要点仍然是将 I/O 与执行分离,这对于两种方法都是如此。

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