lighthouse 9.1.0-dev.20211214 → 9.1.0-dev.20211215
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.
- package/lighthouse-core/audits/byte-efficiency/byte-efficiency-audit.js +1 -14
- package/lighthouse-core/computed/load-simulator.js +1 -0
- package/lighthouse-core/gather/gatherers/seo/font-size.js +7 -4
- package/lighthouse-core/lib/dependency-graph/simulator/simulator.js +17 -0
- package/package.json +1 -1
- package/types/gatherer.d.ts +1 -0
|
@@ -200,19 +200,6 @@ class UnusedBytes extends Audit {
|
|
|
200
200
|
return Math.round(Math.max(savings, 0) / 10) * 10;
|
|
201
201
|
}
|
|
202
202
|
|
|
203
|
-
/**
|
|
204
|
-
* @param {number} wastedBytes
|
|
205
|
-
* @param {Simulator} simulator
|
|
206
|
-
*/
|
|
207
|
-
static computeWastedMsWithThroughput(wastedBytes, simulator) {
|
|
208
|
-
const bitsPerSecond = simulator.getOptions().throughput;
|
|
209
|
-
// https://github.com/GoogleChrome/lighthouse/pull/13323#issuecomment-962031709
|
|
210
|
-
if (bitsPerSecond === 0) return 0;
|
|
211
|
-
const wastedBits = wastedBytes * 8;
|
|
212
|
-
const wastedMs = wastedBits / bitsPerSecond * 1000;
|
|
213
|
-
return wastedMs;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
203
|
/**
|
|
217
204
|
* @param {ByteEfficiencyProduct} result
|
|
218
205
|
* @param {Node|null} graph
|
|
@@ -232,7 +219,7 @@ class UnusedBytes extends Audit {
|
|
|
232
219
|
providedWastedBytesByUrl: result.wastedBytesByUrl,
|
|
233
220
|
});
|
|
234
221
|
} else {
|
|
235
|
-
wastedMs =
|
|
222
|
+
wastedMs = simulator.computeWastedMsFromWastedBytes(wastedBytes);
|
|
236
223
|
}
|
|
237
224
|
|
|
238
225
|
let displayValue = result.displayValue || '';
|
|
@@ -24,6 +24,7 @@ class LoadSimulator {
|
|
|
24
24
|
const options = {
|
|
25
25
|
additionalRttByOrigin: networkAnalysis.additionalRttByOrigin,
|
|
26
26
|
serverResponseTimeByOrigin: networkAnalysis.serverResponseTimeByOrigin,
|
|
27
|
+
observedThroughput: networkAnalysis.throughput,
|
|
27
28
|
};
|
|
28
29
|
|
|
29
30
|
// If we have precomputed lantern data, overwrite our observed estimates and use precomputed instead
|
|
@@ -36,25 +36,28 @@ function hasFontSizeDeclaration(style) {
|
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
38
|
* Computes the CSS specificity of a given selector, i.e. #id > .class > div
|
|
39
|
+
* TODO: Handle pseudo selectors (:not(), :where, :nth-child) and attribute selectors
|
|
39
40
|
* LIMITATION: !important is not respected
|
|
40
41
|
*
|
|
41
42
|
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity
|
|
42
43
|
* @see https://www.smashingmagazine.com/2010/04/css-specificity-and-inheritance/
|
|
44
|
+
* @see https://drafts.csswg.org/selectors-4/#specificity-rules
|
|
43
45
|
*
|
|
44
46
|
* @param {string} selector
|
|
45
47
|
* @return {number}
|
|
46
48
|
*/
|
|
47
49
|
function computeSelectorSpecificity(selector) {
|
|
48
|
-
|
|
50
|
+
// Remove universal selector and separator characters, then split.
|
|
51
|
+
const tokens = selector.replace(/[*\s+>~]/g, ' ').split(' ');
|
|
49
52
|
|
|
50
53
|
let numIDs = 0;
|
|
51
54
|
let numClasses = 0;
|
|
52
55
|
let numTypes = 0;
|
|
53
56
|
|
|
54
57
|
for (const token of tokens) {
|
|
55
|
-
const ids = token.match(
|
|
56
|
-
const classes = token.match(
|
|
57
|
-
const types = token.match(/^[a-z]+/) ? [1] : [];
|
|
58
|
+
const ids = token.match(/(\b|^)#[a-z0-9_-]+/gi) || [];
|
|
59
|
+
const classes = token.match(/(\b|^)\.[a-z0-9_-]+/gi) || [];
|
|
60
|
+
const types = token.match(/^[a-z]+/i) ? [1] : [];
|
|
58
61
|
numIDs += ids.length;
|
|
59
62
|
numClasses += classes.length;
|
|
60
63
|
numTypes += types.length;
|
|
@@ -486,6 +486,23 @@ class Simulator {
|
|
|
486
486
|
};
|
|
487
487
|
}
|
|
488
488
|
|
|
489
|
+
/**
|
|
490
|
+
* @param {number} wastedBytes
|
|
491
|
+
*/
|
|
492
|
+
computeWastedMsFromWastedBytes(wastedBytes) {
|
|
493
|
+
const {throughput, observedThroughput} = this._options;
|
|
494
|
+
|
|
495
|
+
// https://github.com/GoogleChrome/lighthouse/pull/13323#issuecomment-962031709
|
|
496
|
+
// 0 throughput means the no (additional) throttling is expected.
|
|
497
|
+
// This is common for desktop + devtools throttling where throttling is additive and we don't want any additional.
|
|
498
|
+
const bitsPerSecond = throughput === 0 ? observedThroughput : throughput;
|
|
499
|
+
if (bitsPerSecond === 0) return 0;
|
|
500
|
+
|
|
501
|
+
const wastedBits = wastedBytes * 8;
|
|
502
|
+
const wastedMs = wastedBits / bitsPerSecond * 1000;
|
|
503
|
+
return wastedMs;
|
|
504
|
+
}
|
|
505
|
+
|
|
489
506
|
/** @return {Map<string, LH.Gatherer.Simulation.Result['nodeTimings']>} */
|
|
490
507
|
static get ALL_NODE_TIMINGS() {
|
|
491
508
|
return ALL_SIMULATION_NODE_TIMINGS;
|
package/package.json
CHANGED
package/types/gatherer.d.ts
CHANGED