Resource Loading Trace

link 与 script 位置验证

故意让 head 中的样式表延迟 700ms、图片延迟 1100ms,用时序图观察解析阻塞、defer 执行时机和 window load。

CSS +700ms defer +200ms image +1100ms
可验证结论
  1. head 中的 stylesheet 会尽早被发现,并且会影响后续脚本执行和首次渲染。
  2. 无 async / defer 的外链脚本会阻塞 HTML 解析和自身执行;但浏览器的 preload scanner 仍可能提前发现并下载后面的脚本资源。
  3. defer 脚本在 DOM 解析完成后、DOMContentLoaded 前执行。
  4. 写在 </body> 后的脚本会被浏览器容错放回 body,但这不是规范结构。
  5. 图片不会阻塞 DOM 解析,但会推迟 window load。
时序图

左侧是本页 HTML 中的关键节点,右侧是同一次加载得到的双轴时间图;连线只表示代码位置和资源行的对应关系,不表示主解析器已经执行到该节点。

HTML 位置 检测节点
<head><link rel="stylesheet" href="slow-style.css"><script src="blocking.js"></script><script defer src="defer.js"></script></head><body><img src="slow-image.svg"></body>

读图规则:左侧节点说明资源写在 HTML 的哪个位置;右侧 X 轴是时间,Y 轴是资源或事件。长色条表示网络下载耗时,短竖条表示脚本执行或页面事件,虚线表示同一时间轴上的等待区间。`blocking.js` 的下载条可能很早出现,是因为现代浏览器会用 preload scanner 提前扫描后续资源;但它的执行竖条仍在 CSS 完成后,说明“提前下载”不等于“提前执行”。

延迟图片资源
用于验证 window load 等待图片资源的延迟图片
执行日志