DevTools network

选择 network tool

Capture screenshots during page load

  • network tool 勾选 Capture screenshots, 然后 reload
  • 将鼠标悬停在屏幕截图上可以查看捕获该屏幕截图的时间点。竖黄线出现在waterfall 对应的时间
  • 单击屏幕快照的缩略图以过滤掉捕获屏幕快照后发生的所有请求。

上图可以看出,

  • 第一屏展示会在app.9f73f4d2.css, 这个css 明显阻塞了第一屏渲染(first paint), 其他css js 虽然提前下载了但是加了 preload 或prefetch 不阻塞渲染
  • html 最后 的 vendors 和 app js 加载解析完成后 接着 DOMContentLoaded 事件完成, 加载完成到DOMContentLoaded 事件触发 是 Render Tree 构建过程

其中一种方法 防止解析器阻止

<html>
  <head>
    <title>Critical Path: Measure Async</title>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <link href="style.css" rel="stylesheet">
  </head>
  <body onload="measureCRP()">
    <p>Hello <span>web performance</span> students!</p>
    <div><img src="awesome-photo.jpg"></div>
    <script async src="timing.js"></script>
  </body>
</html>
没使用async

JavaScript 可能会查询 CSSOM, 所以在加载 link stylesheet 解析css 时会阻止后面的js 执行, DOMContentLoaded 事件 就需要等待link完全加载才触发

使用async

效果好多了!解析 HTML 之后不久即会触发 domContentLoaded 事件;浏览器已得知不要阻止 JavaScript,并且由于没有其他阻止解析器的脚本,CSSOM 构建也可同步进行了。 不需要等到css 加载完成

Leave a Reply

Your email address will not be published. Required fields are marked *