简单聊聊HTTP2.0中的Server Push( 二 )


文章插图
 
一方面,timeline 总时间变短了 。两者 Loading、Scripting、Rendering 和 Painting 的时间比较接近,但是主动推送 API 后,Idle 从超过 280ms 缩短至 50ms 左右,商家图片的开始加载时间也大幅提前了(视觉上就是餐厅列表瞬间出来了) 。
另一方面,页面的 DOMContentLoaded 和 Load 时间有所提升(在 Network 面板中,没有截图) 。这是意料之中的,客户端在请求 HTML 之后需要同时接收 HTML 和 API 的响应 。这并不影响页面与资源的总体加载时间变短 。
Demo 终究只是 demo 。推送 API 比推送静态资源复杂许多,具体在于大多数 API 是需要带参数的 。即便只推送 GET 方法的 API,也需要带上 query string 和 header 里(包括 Cookie)的参数 。
如果你好奇怎么验证 server push 有没有生效,请打开 Network 面板,你会看到一排漂亮的「Push」:

简单聊聊HTTP2.0中的Server Push

文章插图
 
写在最后Server push 还有许多有趣的地方,限于篇幅不能一一赘述 。
最后我补充两点:
  1. 调试 server push 的正确姿势是用 Chrome 打开 chrome://net-internals/#http2,发了什么帧,收到什么帧,一目了然;
  2. 只要证书匹配,server push 也可以推送其他 host 的资源 。




推荐阅读