广州web培训
达内广州五羊中心

18589266248

热门课程

HTTP 推送不尽如意的地方

  • 时间:2016-10-28 16:18
  • 发布:广州web培训
  • 来源:开源中国

达内广州web培训认为人们在错误地使用HTTP推送的原因之一是,他们在某些并不能提供任何好处甚至损害效率的场景下使用它。

盲目推送静态资源

使用HTTP推送可能做的错事之一就是告诉你自己,“啊,这些资源是所有页面都需要的,把它们配置成所有页面都推送”。

这很糟糕,原因是缓存。在访问第一个页面之后,这些资源很可能就在用户的浏览器缓存中,然而你却在闷头推送。你可能会争辩说,这可比内联所有这些资源好多了。是这样的,不错,但,我必须反过来告诉你,内联资源也是糟糕的主意。

所以,若你在以这种方式盲目推送资源,达内广州web培训建议你确保它是你想要内联在页面中的唯一的资源,也就是关键的CSS。否则,你就是在冒险让重复的请求变慢。

你可能会以为,流重置stream resets会帮助推送已缓存的资源去避免浪费带宽和时间。你可能错了。很显然,并非所有浏览器会检查缓存并终止已缓存资源的推送。就算它们会这样,在流重置信号到达服务器之前,还是使用了一整个RTT时间发送数据。尤其是有多个资源时,这样做将可能带来大量数据浪费。

将内容放入浏览器缓存

你可能以为,推送会将资源放入浏览器缓存,可以用来做一些像使当前资源失效这样的工作。至少目前不是如此。研讨会上的讨论的话题之一就是现实问题,可能我们需要改变当前的推送行为,支持与浏览器缓存直接交互。不过当前,推送还做不到这些。推送响应进入推送缓存,只有真实请求它们时才会放到HTTP缓存中。

因此,如果你在推送资源,希望它们在未来的某个页面中使用,那么浏览器有可能在用到它们之前已经将它们扔出推送缓存之外了。

至少目前的实现是这样的。

填补HTML下发之后的管道

通常,在页面的下载循环中,使用的带宽之间会存在间隙。这意味着我们没能尽快下发资源,通常这是因为浏览器发现资源的延迟。

尽管我们应当尽量下发页面所需资源以填满这些间隙,但通常使用预加载比推送更好。预加载将缓存、cookie以及内容协商纳入考虑,它不会像推送那样存在着过度发送或错误发送的风险。就填补这些间隙而言,推送并无任何优势,所有的只是劣势。故最好不要使用推送达成此目的,使用预加载吧。

缓存摘要Cache Digests

HTTP推送的一大缺点就是,服务器并不必然清楚浏览器的缓存状态,因此在推送时我们可能会将已在缓存中存在的资源推送出去。

有一个标准扩展的提案,叫做Cache Digests。其基本思想是浏览器在HTTP/2连接初始化之后,向服务器发送摘要,服务器在下发资源之前能够精确判断资源是否已在浏览器缓存中存在。

该提案尚处于早期,可能需要简化,这样实现起来花费更少,不过达内广州web培训觉得,离开这个特性,HTTP推送只能算半成品。

总结

HTTP推送可以用来显著提升加载性能。正确使用时能为首个关键路径加载提速,带来性能指标的改善。

推送依然是非常新的技术,像其他所有新工具一样,在找到使用的最优方式之前,还有很长的路要走。这一路多少会有点痛苦。

是故早期实验的初始结果,可能并非全如我们所希望的那样。让我们把那些结果作为标志,指示我们关于推送的使用需要更多聪明才智吧,别妄下结论说它是无用的特性。

上一篇:为什么人们应该感谢程序员?(上)
下一篇:HTTP 推送,显著提升加载性能

马上预约三天免费体验课

姓名:

电话:

达内广州web培训详解ES5循环:for-in

达内广州web培训详解ES6循环:for-of

达内广州web培训详解ES5循环:forEach

达内广州web培训详解ES5简单for循环

选择城市和中心
江西省

贵州省

广西省

海南省