【问题标题】:How can a web developer set the priority of resources in http2?web开发者如何在http2中设置资源的优先级?
【发布时间】:2016-03-19 17:29:29
【问题描述】:

例如,我想尽快加载jquery、bootstrap 和handlebars javascript 文件。 bootstrap 取决于 jquery,因此在 jquery 之后完成下载是有意义的。我如何设置http2 优先级来实现这一目标?

【问题讨论】:

  • 我不认为这是可能的,但如果是的话,你能描述一下你将如何在jquery 加载后立即“醒来”bootstrap 吗?
  • 我希望 http2 的依赖树模型能让我指定运行顺序
  • 不,树模型是由浏览器使用自己的语义建立的。但是,服务器不需要尊重它。但是想想我的问题……
  • 目前我们使用 requirejs 来达到这个目的; require.config({ 路径: { jquery: ['//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min'], bootstrap: '/common/components/bootstrap-3.3.1/ js/bootstrap.min' }, 垫片:{ bootstrap: { deps: ["jquery"] } } });要求(['jquery','bootstrap'],
  • 啊哈。那么 RequireJS 是部署 HTTP/2 PUSH 时的理想选择,我们已经用过几次了。然后我们的服务器根据 RequireJS 文件创建的依赖项 dag 进行优先级排序。您的问题的有趣之处在于以相同的方式优先处理非 PUSH 提取。我只是在写优先级here,(我上传部分版本只是为了这个评论)。但是你带来了一个非常有趣的观点......

标签: http2


【解决方案1】:

您无法设置浏览器传输的优先级,实际上浏览器应该比服务器更清楚。例如,如果用户滚动查看端口或更改活动选项卡等,服务器无法知道,但客户端可以根据这些事情机会并设置优先级。

在服务器端,您可以在客户端有机会请求资源之前使用服务器推送向客户端提供资源,但这也需要谨慎执行,因为如果客户端可能已经拥有它(缓存) 推送是一种带宽浪费(尽管最多限制为新流的初始窗口大小)。

【讨论】:

  • 我同意浏览器会更好地了解用户滚动等事情。我在初始 html 文件中寻找一种方法来为脚本指定不同的优先级。我希望我的脚本异步加载,以免阻塞渲染。分析和聊天等一些脚本不如其他脚本重要。我可以在 html 中将它们的优先级设置得更低吗?
  • 据我所知,目前还没有标准的方法可以做到这一点。也许随着时间的推移会创造出一些东西。
【解决方案2】:

“我希望我的脚本异步加载,以免阻塞渲染。分析和聊天等一些脚本不如其他脚本重要。我可以在 html 中将它们的优先级设置得更低吗?”

可以,可以将脚本标签放在body底部,防止渲染阻塞

【讨论】:

    猜你喜欢
    • 2014-07-02
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多