了解 Firebug 的网络面板

Understanding Firebug's Net panel

我正在尝试使用 Firebug 的 Net 面板分析网页的性能。

以下屏幕截图显示了 google 查询的示例。为了便于讨论,我单击了两次,因此缓存了一些请求。

所以这是我的问题:

1) 在第一个请求结束和下一个请求(即第三个)开始之间发生了什么。同样的上下文:为什么第三个请求比第二个请求开始得早?

2) 接下来的 6 个请求来自缓存。紫色条表示等待时间,我假设这是浏览器 "waiting for the server to to something" 的时间。因此,来自缓存,浏览器究竟在等待什么。另外:可能是什么原因导致 4.4KB 响应的等待时间(63ms)比 126.3KB 响应(50ms)更长。

3) 在下一个请求中有一个相当长的绿色条指示接收响应的时间。为什么这似乎与响应的大小至少不成比例?

4) 红色竖线表示加载事件。根据 https://developer.mozilla.org/en-US/docs/Web/Events/load,这意味着:"The load event is fired when a resource and its dependent resources have finished loading." 在时间轴中,您可以看到在加载事件之后仍然执行了几个请求。怎么会?他们是否被视为不依赖?如果是,为什么?

  1. 需要解析第一个请求的响应以找出还需要加载什么。这个解析时间导致到第二个请求的差距。另见 my answer to a related question.

  2. 来自缓存的响应仍然有关联的网络请求,returns 304 HTTP 状态代码。展开请求时可以看到请求和响应头以及缓存响应的响应头。

    与此相反,还有一个响应直接从名为 Back-Forward Cache (or BFCache) 的特殊缓存提供。这些响应在浏览器启动后直接发生,当您启用了从上次会话中恢复选项卡的选项时,以及当您在选项卡历史记录中来回导航时。

  3. 这首先取决于网络连接速度和响应的大小,还取决于服务器发送完整响应所需的时间。如果不知道服务器端发生了什么,就无法解释为什么一个请求比其他请求花费那么长的时间。

  4. 加载页面请求时会触发 load 事件,包括所有依赖资源,如 CSS、图像、JavaScript 源等。请求已启动在 load 事件被异步加载之后,例如通过 XMLHttpRequest 或 defer attribute of the element.