资源提示的奇妙但令人困惑的想法:(a)同步?

Bra*_*roy 8 html5 prefetch prerender

我一直在阅读谷歌的幻灯片,以进行所谓的预优化.(对于那些感兴趣的人或那些不知道我在说什么的人,这张幻灯片总结了它.)

在HTML5中,我们可以预取和预呈现link元素中的页面.这是一个概述.我们可以使用reldns-prefetch,subresource,prefetchprerender.

第一个令人困惑的事情是,显然只有prefetch规范的HTML5(和5.1),但没有其他人的.(然而!)第二,浏览器支持对于(dns-)是好的,prefetch但对其他人来说非常糟糕.特别是Firefox缺乏支持prerender令人讨厌.

第三,我问自己的问题是:浏览器读取行后是否会发生预取(或任何其他方法)(然后阻止当前页面加载),或者等待加载在当前页面完全加载之前的后台资源?

如果它以阻塞方式同步加载,有没有办法异步或在页面加载后执行此操作?我想这样的JS解决方案,但我不确定它会异步运行.

var pre = document.createElement("link");

pre.setAttribute("rel", "prerender prefetch");
pre.setAttribute("href", "next-page.php");

document.head.appendChild(pre);
Run Code Online (Sandbox Code Playgroud)

如果适用,请回答这两个问题!

编辑9月17日

阅读编辑的资源提示草案后,我发现了以下内容(强调我的):

由于CPU,GPU,内存和网络资源的额外争用,下一次导航可能需要的资源提取可能会对当前导航上下文的性能产生负面影响.为解决此问题,用户代理应实现逻辑以减少和消除此类争用:

  • 下一导航所需的资源提取应具有较低的相对优先级,并且不应阻止或干扰当前导航上下文所需的资源提取.
  • 启动下一导航所需的资源获取的最佳时间取决于协商的传输协议,用户当前连接配置文件,可用设备资源和其他上下文特定变量.留下用户代理以确定启动提取的最佳时间 - 例如,用户代理可以决定等待直到所有其他下载完成,或者如果协商的协议支持必要的原语,则可以选择具有低优先级的流水线请求.或者,由于资源约束,用户偏好或其他因素,用户代理可以选择退出启动提取.

请注意用户代理可以执行此操作的程度.我真的担心这将导致不同浏览器的不同实现,这将导致再次分歧.

问题仍然存在.我不清楚是否通过使用prefetch或其他方式同步加载外部资源(因此,当放入头部时,在加载内容之前),或者异步(具有较低优先级).我猜测后者,虽然我不明白这是怎么可能的,因为link规范中没有任何内容可以允许异步加载链接元素的内容.

Pal*_*tim 3

免责声明:我没有花很多时间研究这些规格,所以我很可能错过了一些重要的点。

也就是说,我的阅读与您的一致:如果由于pre优化而获取资源,则它很可能是异步获取的,并且几乎无法保证您应该期望在管道中的何处获取它。

其意图似乎是建议性的而不是规定性的,就像CSSwill-change属性建议渲染引擎应特别考虑某个元素,但不规定行为,或者实际上应该有任何特定行为一样。

链接规范中没有任何内容允许异步加载链接元素的内容

并非所有链接在任何情况下都会加载内容(类型author不会导致 UA 下载 URL 的内容mailto:),并且除了以下讨论之外,我在规范中找不到任何有关获取资源的提及crossorigin

外部资源链接的确切行为取决于为相关链接类型定义的确切关系。某些属性控制是否应用外部资源(如下定义)...用户代理可能选择仅在需要时尝试获取此类资源,而不是主动获取所有需要的外部资源。不适用。

(强调我的)

link这似乎为异步获取(或根本不获取)a 指定的资源打开了大门。