lighthouse 9.5.0-dev.20220818 → 9.5.0-dev.20220819

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -198,17 +198,15 @@ async function begin() {
198
198
  const testDefns = getShardedDefinitions(requestedTestDefns, argv.shard);
199
199
 
200
200
  let smokehouseResult;
201
- let server;
202
- let serverForOffline;
201
+ let servers;
203
202
  let takeNetworkRequestUrls = undefined;
204
203
 
205
204
  try {
206
205
  // If running the core tests, spin up the test server.
207
206
  if (testDefnPath === coreTestDefnsPath) {
208
- ({server, serverForOffline} = await import('../../fixtures/static-server.js'));
209
- await server.listen(10200, 'localhost');
210
- await serverForOffline.listen(10503, 'localhost');
211
- takeNetworkRequestUrls = server.takeRequestUrls.bind(server);
207
+ const {createServers} = await import('../../fixtures/static-server.js');
208
+ servers = await createServers();
209
+ takeNetworkRequestUrls = servers[0].takeRequestUrls.bind(servers[0]);
212
210
  }
213
211
 
214
212
  const prunedTestDefns = pruneExpectedNetworkRequests(testDefns, takeNetworkRequestUrls);
@@ -224,8 +222,7 @@ async function begin() {
224
222
 
225
223
  smokehouseResult = (await runSmokehouse(prunedTestDefns, options));
226
224
  } finally {
227
- if (server) await server.close();
228
- if (serverForOffline) await serverForOffline.close();
225
+ servers?.forEach(s => s.close());
229
226
  }
230
227
 
231
228
  if (!smokehouseResult.success) {
@@ -9,6 +9,48 @@
9
9
  * @fileoverview Fills most of the role of NetworkManager and NetworkRequest classes from DevTools.
10
10
  * @see https://cs.chromium.org/chromium/src/third_party/blink/renderer/devtools/front_end/sdk/NetworkRequest.js
11
11
  * @see https://cs.chromium.org/chromium/src/third_party/blink/renderer/devtools/front_end/sdk/NetworkManager.js
12
+
13
+ A detailed overview of the Chromium networking layer can be found here:
14
+ https://raw.githubusercontent.com/GoogleChrome/lighthouse/master/docs/Network-Timing.svg
15
+
16
+ Below is a simplified model.
17
+
18
+ DevTools box-whisker
19
+
20
+ |-------[xxxxxXXXXXX]-|
21
+ (1) (2) (3) (4)
22
+
23
+ (1) leading whisker
24
+
25
+ Covers various stages:
26
+
27
+ - Queuing (delta between renderer knowing about request and network manager knowing about it)
28
+ - DNS
29
+ - Connection setup cost (TCP, TLS, SSL, etc.)
30
+
31
+ CDP: left whisker edge is Network.requestWillBeSent timestamp
32
+
33
+ (2) light shaded region
34
+
35
+ browser network manager has initiated the request, hasn't recieved any bytes back yet
36
+ Note: even with early-hint response, only the "real" response is considered here
37
+
38
+ CDP: Network.requestWillBeSentExtraInfo timing.requestTime + timing.sendStart
39
+
40
+ (3) dark shaded region
41
+
42
+ browser network manager has recieved the very first header byte
43
+
44
+ CDP: Network.requestWillBeSentExtraInfo timing.requestTime + timing.recievedHeadersEnd
45
+ CDP: (right edge of box) Network.finished/Network.failed timestamp
46
+ Trace: ResourceFinish.finishedTime
47
+
48
+ (4) trailing whisker
49
+
50
+ Marks time when render process main thread is available to use the resource. Could be long
51
+ if main thread is busy. Currently don't use this anywhere.
52
+
53
+ Trace: ResourceFinish.ts
12
54
  */
13
55
 
14
56
  import URL from './url-shim.js';
@@ -322,6 +364,7 @@ class NetworkRequest {
322
364
  if (timing.requestTime === 0 || timing.receiveHeadersEnd === -1) return;
323
365
  // Take startTime and responseReceivedTime from timing data for better accuracy.
324
366
  // Timing's requestTime is a baseline in seconds, rest of the numbers there are ticks in millis.
367
+ // TODO: This skips the "queuing time" before the netstack has taken over ... is this a mistake?
325
368
  this.startTime = timing.requestTime;
326
369
  const headersReceivedTime = timing.requestTime + timing.receiveHeadersEnd / 1000;
327
370
  if (!this.responseReceivedTime || this.responseReceivedTime < 0) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "lighthouse",
3
3
  "type": "module",
4
- "version": "9.5.0-dev.20220818",
4
+ "version": "9.5.0-dev.20220819",
5
5
  "description": "Automated auditing, performance metrics, and best practices for the web.",
6
6
  "main": "./core/index.js",
7
7
  "bin": {