diff --git a/cli/test/smokehouse/test-definitions/byte-efficiency.js b/cli/test/smokehouse/test-definitions/byte-efficiency.js index b712396d96a6..189a0fcaf6b9 100644 --- a/cli/test/smokehouse/test-definitions/byte-efficiency.js +++ b/cli/test/smokehouse/test-definitions/byte-efficiency.js @@ -96,10 +96,8 @@ const expectations = { 'uses-http2': { score: 1, details: { - items: { - // localhost gets a free pass on uses-h2 - length: 0, - }, + // localhost gets a free pass on uses-h2 + items: [], }, }, 'unminified-css': { @@ -153,10 +151,13 @@ const expectations = { }, 'unused-javascript': { score: '<1', - details: { + metricSavings: { // the specific ms value here is not meaningful for this smoketest // *some* savings should be reported - overallSavingsMs: '>0', + FCP: '>0', + }, + details: { + overallSavingsMs: '>=0', overallSavingsBytes: '35000 +/- 1000', items: [ { diff --git a/core/audits/dobetterweb/uses-http2.js b/core/audits/dobetterweb/uses-http2.js index 0c22639b81be..cb66da35d954 100644 --- a/core/audits/dobetterweb/uses-http2.js +++ b/core/audits/dobetterweb/uses-http2.js @@ -78,11 +78,9 @@ class UsesHTTP2Audit extends Audit { options = Object.assign({label: ''}, options); const beforeLabel = `${this.meta.id}-${options.label}-before`; const afterLabel = `${this.meta.id}-${options.label}-after`; - const flexibleOrdering = true; const urlsToChange = new Set(results.map(result => result.url)); - const simulationBefore = - simulator.simulate(graph, {label: beforeLabel, flexibleOrdering}); + const simulationBefore = simulator.simulate(graph, {label: beforeLabel}); // Update all the protocols to reflect implementing our recommendations /** @type {Map} */ @@ -95,7 +93,7 @@ class UsesHTTP2Audit extends Audit { node.request.protocol = 'h2'; }); - const simulationAfter = simulator.simulate(graph, {label: afterLabel, flexibleOrdering}); + const simulationAfter = simulator.simulate(graph, {label: afterLabel}); // Restore the original protocol after we've done our simulation graph.traverse(node => { diff --git a/core/audits/prioritize-lcp-image.js b/core/audits/prioritize-lcp-image.js index 2b61a209471f..cc616ab2e233 100644 --- a/core/audits/prioritize-lcp-image.js +++ b/core/audits/prioritize-lcp-image.js @@ -194,8 +194,8 @@ class PrioritizeLcpImage extends Audit { modifiedLCPNode.removeAllDependencies(); modifiedLCPNode.addDependency(mainDocumentNode); - const simulationBeforeChanges = simulator.simulate(graph, {flexibleOrdering: true}); - const simulationAfterChanges = simulator.simulate(modifiedGraph, {flexibleOrdering: true}); + const simulationBeforeChanges = simulator.simulate(graph); + const simulationAfterChanges = simulator.simulate(modifiedGraph); const lcpTimingsBefore = simulationBeforeChanges.nodeTimings.get(lcpNode); if (!lcpTimingsBefore) throw new Error('Impossible - node timings should never be undefined'); const lcpTimingsAfter = simulationAfterChanges.nodeTimings.get(modifiedLCPNode); diff --git a/core/audits/uses-rel-preload.js b/core/audits/uses-rel-preload.js index bbef1d0d7ae6..4bb79844e7bf 100644 --- a/core/audits/uses-rel-preload.js +++ b/core/audits/uses-rel-preload.js @@ -143,9 +143,9 @@ class UsesRelPreloadAudit extends Audit { return {wastedMs: 0, results: []}; } - // Preload changes the ordering of requests, simulate the original graph with flexible ordering + // Preload changes the ordering of requests, simulate the original graph // to have a reasonable baseline for comparison. - const simulationBeforeChanges = simulator.simulate(graph, {flexibleOrdering: true}); + const simulationBeforeChanges = simulator.simulate(graph); const modifiedGraph = graph.cloneWithRelationships(); /** @type {Array} */ @@ -174,8 +174,8 @@ class UsesRelPreloadAudit extends Audit { node.addDependency(mainDocumentNode); } - // Once we've modified the dependencies, simulate the new graph with flexible ordering. - const simulationAfterChanges = simulator.simulate(modifiedGraph, {flexibleOrdering: true}); + // Once we've modified the dependencies, simulate the new graph. + const simulationAfterChanges = simulator.simulate(modifiedGraph); const originalNodesByRecord = Array.from(simulationBeforeChanges.nodeTimings.keys()) // @ts-expect-error we don't care if all nodes without a record collect on `undefined` .reduce((map, node) => map.set(node.record, node), new Map()); diff --git a/core/lib/lantern-trace-saver.js b/core/lib/lantern-trace-saver.js index f57298e0dd28..ec3a98952290 100644 --- a/core/lib/lantern-trace-saver.js +++ b/core/lib/lantern-trace-saver.js @@ -255,7 +255,6 @@ export default { 'unlabeled', // These node timings should be nearly identical to the ones produced for Interactive 'optimisticSpeedIndex', - 'optimisticFlexSpeedIndex', 'pessimisticSpeedIndex', ], convertNodeTimingsToTrace, diff --git a/core/lib/lantern/metric.js b/core/lib/lantern/metric.js index 536d0b74b802..166ec6754ebc 100644 --- a/core/lib/lantern/metric.js +++ b/core/lib/lantern/metric.js @@ -101,19 +101,15 @@ class Metric { const optimisticGraph = this.getOptimisticGraph(graph, processedNavigation); const pessimisticGraph = this.getPessimisticGraph(graph, processedNavigation); - /** @type {{flexibleOrdering?: boolean, label?: string}} */ let simulateOptions = {label: `optimistic${metricName}`}; const optimisticSimulation = simulator.simulate(optimisticGraph, simulateOptions); - simulateOptions = {label: `optimisticFlex${metricName}`, flexibleOrdering: true}; - const optimisticFlexSimulation = simulator.simulate(optimisticGraph, simulateOptions); - simulateOptions = {label: `pessimistic${metricName}`}; const pessimisticSimulation = simulator.simulate(pessimisticGraph, simulateOptions); const optimisticEstimate = this.getEstimateFromSimulation( - optimisticSimulation.timeInMs < optimisticFlexSimulation.timeInMs ? - optimisticSimulation : optimisticFlexSimulation, {...extras, optimistic: true} + optimisticSimulation, + {...extras, optimistic: true} ); const pessimisticEstimate = this.getEstimateFromSimulation( diff --git a/core/lib/lantern/metrics/interactive.js b/core/lib/lantern/metrics/interactive.js index 3b94258639ad..75b019fff004 100644 --- a/core/lib/lantern/metrics/interactive.js +++ b/core/lib/lantern/metrics/interactive.js @@ -21,8 +21,8 @@ class Interactive extends Metric { static get COEFFICIENTS() { return { intercept: 0, - optimistic: 0.5, - pessimistic: 0.5, + optimistic: 0.45, + pessimistic: 0.55, }; } diff --git a/core/lib/lantern/metrics/speed-index.js b/core/lib/lantern/metrics/speed-index.js index 3b815f8ab2fb..6bf666a4e7d3 100644 --- a/core/lib/lantern/metrics/speed-index.js +++ b/core/lib/lantern/metrics/speed-index.js @@ -18,12 +18,11 @@ class SpeedIndex extends Metric { */ static get COEFFICIENTS() { return { - // Negative intercept is OK because estimate is Math.max(FCP, Speed Index) and - // the optimistic estimate is based on the real observed speed index rather than a real - // lantern graph. - intercept: -250, + // Note that the optimistic estimate is based on the real observed speed index rather than a + // real lantern graph (and the final estimate will be Math.max(FCP, Speed Index)). + intercept: 0, optimistic: 1.4, - pessimistic: 0.65, + pessimistic: 0.4, }; } diff --git a/core/lib/lantern/simulator/connection-pool.js b/core/lib/lantern/simulator/connection-pool.js index 5d09423bbf18..b582863ddecb 100644 --- a/core/lib/lantern/simulator/connection-pool.js +++ b/core/lib/lantern/simulator/connection-pool.js @@ -85,24 +85,13 @@ export class ConnectionPool { /** * @param {Array} connections - * @param {{ignoreConnectionReused?: boolean, observedConnectionWasReused: boolean}} options */ - _findAvailableConnectionWithLargestCongestionWindow(connections, options) { - const {ignoreConnectionReused, observedConnectionWasReused} = options; - + _findAvailableConnectionWithLargestCongestionWindow(connections) { /** @type {TcpConnection|null} */ let maxConnection = null; for (let i = 0; i < connections.length; i++) { const connection = connections[i]; - // Normally, we want to make sure the connection warmth matches the state of the record - // we're acquiring for. Do this check first since it's the common case and cheaper than our - // "in use" check below. - // Use the _warmed property instead of the getter because this is a surprisingly hot code path. - if (!ignoreConnectionReused && connection._warmed !== observedConnectionWasReused) { - continue; - } - // Connections that are in use are never available. if (this._connectionsInUse.has(connection)) { continue; @@ -121,23 +110,15 @@ export class ConnectionPool { * if no connection was available. If returned, connection will not be available for other network * records until release is called. * - * If ignoreConnectionReused is true, acquire will consider all connections not in use as available. - * Otherwise, only connections that have matching "warmth" are considered available. - * * @param {Lantern.NetworkRequest} record - * @param {{ignoreConnectionReused?: boolean}} options * @return {?TcpConnection} */ - acquire(record, options = {}) { + acquire(record) { if (this._connectionsByRecord.has(record)) throw new Error('Record already has a connection'); const origin = record.parsedURL.securityOrigin; - const observedConnectionWasReused = !!this._connectionReusedByRequestId.get(record.requestId); const connections = this._connectionsByOrigin.get(origin) || []; - const connectionToUse = this._findAvailableConnectionWithLargestCongestionWindow(connections, { - ignoreConnectionReused: options.ignoreConnectionReused, - observedConnectionWasReused, - }); + const connectionToUse = this._findAvailableConnectionWithLargestCongestionWindow(connections); if (!connectionToUse) return null; diff --git a/core/lib/lantern/simulator/simulator.js b/core/lib/lantern/simulator/simulator.js index 106dec86188e..67edffca6883 100644 --- a/core/lib/lantern/simulator/simulator.js +++ b/core/lib/lantern/simulator/simulator.js @@ -80,7 +80,6 @@ class Simulator { this._cachedNodeListByStartPosition = []; // Properties reset on every `.simulate` call but duplicated here for type checking - this._flexibleOrdering = false; this._nodeTimings = new SimulatorTimingMap(); /** @type {Map} */ this._numberInProgressByType = new Map(); @@ -197,9 +196,7 @@ class Simulator { * @return {?TcpConnection} */ _acquireConnection(record) { - return this._connectionPool.acquire(record, { - ignoreConnectionReused: this._flexibleOrdering, - }); + return this._connectionPool.acquire(record); } /** @@ -425,13 +422,13 @@ class Simulator { * Estimates the time taken to process all of the graph's nodes, returns the overall time along with * each node annotated by start/end times. * - * If flexibleOrdering is set, simulator/connection pool are allowed to deviate from what was + * Simulator/connection pool are allowed to deviate from what was * observed in the trace/devtoolsLog and start requests as soon as they are queued (i.e. do not * wait around for a warm connection to be available if the original record was fetched on a warm * connection). * * @param {Node} graph - * @param {{flexibleOrdering?: boolean, label?: string}=} options + * @param {{label?: string}=} options * @return {Lantern.Simulation.Result} */ simulate(graph, options) { @@ -441,11 +438,9 @@ class Simulator { options = Object.assign({ label: undefined, - flexibleOrdering: false, }, options); // initialize the necessary data containers - this._flexibleOrdering = !!options.flexibleOrdering; this._dns = new DNSCache({rtt: this._rtt}); this._initializeConnectionPool(graph); this._initializeAuxiliaryData(); @@ -470,11 +465,9 @@ class Simulator { } if (!nodesInProgress.size) { - // interplay between fromDiskCache and connectionReused can be incorrect - // proceed with flexibleOrdering if we can, otherwise give up - if (this._flexibleOrdering) throw new Error('Failed to start a node'); - this._flexibleOrdering = true; - continue; + // Interplay between fromDiskCache and connectionReused can be incorrect, + // have to give up. + throw new Error('Failed to start a node'); } // set the available throughput for all connections based on # inflight diff --git a/core/test/audits/__snapshots__/metrics-test.js.snap b/core/test/audits/__snapshots__/metrics-test.js.snap index 601e70943b3a..ed5cf0c42972 100644 --- a/core/test/audits/__snapshots__/metrics-test.js.snap +++ b/core/test/audits/__snapshots__/metrics-test.js.snap @@ -49,7 +49,7 @@ Object { "observedTimeOriginTs": 760620643599, "observedTraceEnd": 4778, "observedTraceEndTs": 760625421283, - "speedIndex": 6330, + "speedIndex": 5546, "speedIndexTs": undefined, "timeToFirstByte": 2394, "timeToFirstByteTs": undefined, @@ -124,7 +124,7 @@ Object { "firstContentfulPaintTs": undefined, "firstMeaningfulPaint": 2764, "firstMeaningfulPaintTs": undefined, - "interactive": 4457, + "interactive": 4607, "interactiveTs": undefined, "largestContentfulPaint": 2764, "largestContentfulPaintAllFrames": undefined, @@ -163,7 +163,7 @@ Object { "observedTimeOriginTs": 713037023064, "observedTraceEnd": 7416, "observedTraceEndTs": 713044439102, - "speedIndex": 3684, + "speedIndex": 3172, "speedIndexTs": undefined, "timeToFirstByte": 611, "timeToFirstByteTs": undefined, @@ -238,7 +238,7 @@ Object { "firstContentfulPaintTs": undefined, "firstMeaningfulPaint": 1541, "firstMeaningfulPaintTs": undefined, - "interactive": 4206, + "interactive": 3955, "interactiveTs": undefined, "largestContentfulPaint": undefined, "largestContentfulPaintAllFrames": undefined, @@ -277,7 +277,7 @@ Object { "observedTimeOriginTs": 225414172015, "observedTraceEnd": 12540, "observedTraceEndTs": 225426711887, - "speedIndex": 1676, + "speedIndex": 1511, "speedIndexTs": undefined, "timeToFirstByte": 760, "timeToFirstByteTs": undefined, diff --git a/core/test/audits/__snapshots__/predictive-perf-test.js.snap b/core/test/audits/__snapshots__/predictive-perf-test.js.snap index 9e196226b02d..45e5067b1ec8 100644 --- a/core/test/audits/__snapshots__/predictive-perf-test.js.snap +++ b/core/test/audits/__snapshots__/predictive-perf-test.js.snap @@ -11,14 +11,14 @@ Object { "pessimisticFMP": 3233, "pessimisticLCP": 3233, "pessimisticSI": 3052, - "pessimisticTTI": 5119, + "pessimisticTTI": 5272, "roughEstimateOfFCP": 2294, "roughEstimateOfFMP": 2764, "roughEstimateOfLCP": 2764, "roughEstimateOfLCPLoadEnd": undefined, "roughEstimateOfLCPLoadStart": undefined, - "roughEstimateOfSI": 3684, + "roughEstimateOfSI": 3172, "roughEstimateOfTTFB": 611, - "roughEstimateOfTTI": 4457, + "roughEstimateOfTTI": 4607, } `; diff --git a/core/test/audits/byte-efficiency/render-blocking-resources-test.js b/core/test/audits/byte-efficiency/render-blocking-resources-test.js index 25c6d69280a9..8df58c318755 100644 --- a/core/test/audits/byte-efficiency/render-blocking-resources-test.js +++ b/core/test/audits/byte-efficiency/render-blocking-resources-test.js @@ -33,8 +33,8 @@ describe('Render blocking resources audit', () => { const computedCache = new Map(); const result = await RenderBlockingResourcesAudit.audit(artifacts, {settings, computedCache}); assert.equal(result.score, 0); - assert.equal(result.numericValue, 316); - assert.deepStrictEqual(result.metricSavings, {FCP: 316, LCP: 0}); + assert.equal(result.numericValue, 304); + assert.deepStrictEqual(result.metricSavings, {FCP: 304, LCP: 0}); }); it('evaluates correct wastedMs when LCP is text', async () => { @@ -59,7 +59,7 @@ describe('Render blocking resources audit', () => { const settings = {throttlingMethod: 'simulate', throttling: mobileSlow4G}; const computedCache = new Map(); const result = await RenderBlockingResourcesAudit.audit(artifacts, {settings, computedCache}); - assert.deepStrictEqual(result.metricSavings, {FCP: 316, LCP: 316}); + assert.deepStrictEqual(result.metricSavings, {FCP: 304, LCP: 304}); }); it('evaluates amp page correctly', async () => { @@ -82,7 +82,7 @@ describe('Render blocking resources audit', () => { const settings = {throttlingMethod: 'simulate', throttling: mobileSlow4G}; const computedCache = new Map(); const result = await RenderBlockingResourcesAudit.audit(artifacts, {settings, computedCache}); - expect(result.numericValue).toEqual(316); + expect(result.numericValue).toEqual(0); expect(result.details.items).toEqual([ { totalBytes: 389629, @@ -96,7 +96,7 @@ describe('Render blocking resources audit', () => { wastedMs: 311, }, ]); - expect(result.metricSavings).toEqual({FCP: 316, LCP: 0}); + expect(result.metricSavings).toEqual({FCP: 0, LCP: 0}); }); describe('#estimateSavingsWithGraphs', () => { @@ -155,8 +155,8 @@ describe('Render blocking resources audit', () => { documentNode.addDependent(styleNode); const result = estimate(simulator, documentNode, deferredIds, wastedBytesMap, Stacks); - // Saving 1000 + 1000 + 100ms for TCP handshake + 1 RT savings + server response time - assert.equal(result, 2100); + // Saving 1000 + 100ms for 1 RT savings + server response time + assert.equal(result, 1100); }); it('does not report savings from AMP-stack when document already exceeds 2.1s', () => { diff --git a/core/test/audits/predictive-perf-test.js b/core/test/audits/predictive-perf-test.js index 6f1e8043d50b..8ec3828d54c5 100644 --- a/core/test/audits/predictive-perf-test.js +++ b/core/test/audits/predictive-perf-test.js @@ -25,7 +25,7 @@ describe('Performance: predictive performance audit', () => { const context = {computedCache: new Map(), settings: {locale: 'en'}}; const output = await PredictivePerf.audit(artifacts, context); - expect(output.displayValue).toBeDisplayString('4,460 ms'); + expect(output.displayValue).toBeDisplayString('4,610 ms'); const metrics = output.details.items[0]; for (const [key, value] of Object.entries(metrics)) { metrics[key] = value === undefined ? value : Math.round(value); diff --git a/core/test/computed/metrics/__snapshots__/interactive-test.js.snap b/core/test/computed/metrics/__snapshots__/interactive-test.js.snap index f84e25a5625b..fee409bc1c8e 100644 --- a/core/test/computed/metrics/__snapshots__/interactive-test.js.snap +++ b/core/test/computed/metrics/__snapshots__/interactive-test.js.snap @@ -3,7 +3,7 @@ exports[`Metrics: TTI should compute a simulated value 1`] = ` Object { "optimistic": 4178, - "pessimistic": 4234, - "timing": 4206, + "pessimistic": 3773, + "timing": 3955, } `; diff --git a/core/test/computed/metrics/speed-index-test.js b/core/test/computed/metrics/speed-index-test.js index 31e64aba8b4b..b9f97d83f4ff 100644 --- a/core/test/computed/metrics/speed-index-test.js +++ b/core/test/computed/metrics/speed-index-test.js @@ -32,7 +32,7 @@ describe('Metrics: Speed Index', () => { Object { "optimistic": 605, "pessimistic": 1661, - "timing": 1676, + "timing": 1511, } `); }); @@ -68,7 +68,7 @@ describe('Metrics: Speed Index', () => { Object { "optimistic": 575, "pessimistic": 633, - "timing": 635, + "timing": 642, } `); }); diff --git a/core/test/fixtures/lantern-baseline-accuracy.json b/core/test/fixtures/lantern-baseline-accuracy.json index f14c04e9f50e..90a195c0da2c 100644 --- a/core/test/fixtures/lantern-baseline-accuracy.json +++ b/core/test/fixtures/lantern-baseline-accuracy.json @@ -1,27 +1,27 @@ { "roughEstimateOfFCP": { - "p50": 0.28936170212765955, + "p50": 0.27426955702167766, "p90": 0.4879553466509988, "p95": 0.5191288993525603 }, "roughEstimateOfFMP": { - "p50": 0.31948476052249636, - "p90": 0.5385564466378778, + "p50": 0.30248500428449016, + "p90": 0.5397902529302899, "p95": 0.6406490583915669 }, "roughEstimateOfSI": { - "p50": 0.26426566884939195, - "p90": 0.6513486513486514, - "p95": 0.9026165650206571 + "p50": 0.2393280405016684, + "p90": 0.574017415862556, + "p95": 0.6524087591240876 }, "roughEstimateOfTTI": { - "p50": 0.27676284306826177, - "p90": 0.6565531544791597, - "p95": 0.7422988097352994 + "p50": 0.28936170212765955, + "p90": 0.6481503092542887, + "p95": 0.7325279801030379 }, "roughEstimateOfLCP": { "p50": 0.20067905646890635, - "p90": 0.6717796212239787, + "p90": 0.6189894267042134, "p95": 0.8626966985498303 } } diff --git a/core/test/fixtures/lantern-baseline-computed-values.json b/core/test/fixtures/lantern-baseline-computed-values.json index df24e03440e6..152f0935a365 100644 --- a/core/test/fixtures/lantern-baseline-computed-values.json +++ b/core/test/fixtures/lantern-baseline-computed-values.json @@ -1,81 +1,81 @@ { "sites": [ - {"url": "http://m.iciba.com", "roughEstimateOfFCP": 1744, "optimisticFCP": 1744, "pessimisticFCP": 1744, "roughEstimateOfFMP": 1744, "optimisticFMP": 1744, "pessimisticFMP": 1744, "roughEstimateOfTTI": 6497, "optimisticTTI": 3338, "pessimisticTTI": 9656, "roughEstimateOfSI": 9337, "optimisticSI": 4764, "pessimisticSI": 4488, "roughEstimateOfLCP": 9787, "optimisticLCP": 9169, "pessimisticLCP": 10404, "roughEstimateOfTTFB": 685}, - {"url": "http://www.zol.com.cn/", "roughEstimateOfFCP": 3447, "optimisticFCP": 3447, "pessimisticFCP": 3447, "roughEstimateOfFMP": 3447, "optimisticFMP": 3447, "pessimisticFMP": 3447, "roughEstimateOfTTI": 16331, "optimisticTTI": 15003, "pessimisticTTI": 17660, "roughEstimateOfSI": 12524, "optimisticSI": 4861, "pessimisticSI": 9183, "roughEstimateOfLCP": 4369, "optimisticLCP": 4194, "pessimisticLCP": 4544, "roughEstimateOfTTFB": 648}, - {"url": "https://birdsarentreal.com", "roughEstimateOfFCP": 2962, "optimisticFCP": 2962, "pessimisticFCP": 2962, "roughEstimateOfFMP": 3448, "optimisticFMP": 3124, "pessimisticFMP": 3772, "roughEstimateOfTTI": 13465, "optimisticTTI": 12107, "pessimisticTTI": 14823, "roughEstimateOfSI": 5123, "optimisticSI": 1323, "pessimisticSI": 5417, "roughEstimateOfLCP": 7754, "optimisticLCP": 6986, "pessimisticLCP": 8523, "roughEstimateOfTTFB": 701}, - {"url": "https://depositfiles.com/", "roughEstimateOfFCP": 5098, "optimisticFCP": 5098, "pessimisticFCP": 5098, "roughEstimateOfFMP": 5486, "optimisticFMP": 5098, "pessimisticFMP": 5874, "roughEstimateOfTTI": 5982, "optimisticTTI": 5854, "pessimisticTTI": 6109, "roughEstimateOfSI": 7568, "optimisticSI": 2787, "pessimisticSI": 6025, "roughEstimateOfLCP": 6034, "optimisticLCP": 6034, "pessimisticLCP": 6034, "roughEstimateOfTTFB": 907}, - {"url": "https://en-maktoob.yahoo.com/?p=xa", "roughEstimateOfFCP": 1410, "optimisticFCP": 1410, "pessimisticFCP": 1410, "roughEstimateOfFMP": 1427, "optimisticFMP": 1410, "pessimisticFMP": 1443, "roughEstimateOfTTI": 6591, "optimisticTTI": 5167, "pessimisticTTI": 8016, "roughEstimateOfSI": 3965, "optimisticSI": 1039, "pessimisticSI": 4248, "roughEstimateOfLCP": 7253, "optimisticLCP": 7090, "pessimisticLCP": 7416, "roughEstimateOfTTFB": 618}, - {"url": "https://en.softonic.com", "roughEstimateOfFCP": 2191, "optimisticFCP": 2191, "pessimisticFCP": 2191, "roughEstimateOfFMP": 2584, "optimisticFMP": 2191, "pessimisticFMP": 2977, "roughEstimateOfTTI": 31427, "optimisticTTI": 27015, "pessimisticTTI": 35840, "roughEstimateOfSI": 12996, "optimisticSI": 3067, "pessimisticSI": 13772, "roughEstimateOfLCP": 3915, "optimisticLCP": 3504, "pessimisticLCP": 4325, "roughEstimateOfTTFB": 899}, - {"url": "https://gm.58.com/glsanfrancisco-sl/", "roughEstimateOfFCP": 3019, "optimisticFCP": 3019, "pessimisticFCP": 3019, "roughEstimateOfFMP": 3019, "optimisticFMP": 3019, "pessimisticFMP": 3019, "roughEstimateOfTTI": 4785, "optimisticTTI": 4436, "pessimisticTTI": 5134, "roughEstimateOfSI": 4605, "optimisticSI": 1762, "pessimisticSI": 3674, "roughEstimateOfLCP": 5337, "optimisticLCP": 5045, "pessimisticLCP": 5630, "roughEstimateOfTTFB": 787}, - {"url": "https://m.facebook.com/", "roughEstimateOfFCP": 2438, "optimisticFCP": 2407, "pessimisticFCP": 2468, "roughEstimateOfFMP": 2438, "optimisticFMP": 2407, "pessimisticFMP": 2468, "roughEstimateOfTTI": 4822, "optimisticTTI": 4217, "pessimisticTTI": 5427, "roughEstimateOfSI": 2685, "optimisticSI": 479, "pessimisticSI": 3484, "roughEstimateOfLCP": 3422, "optimisticLCP": 3391, "pessimisticLCP": 3452, "roughEstimateOfTTFB": 626}, - {"url": "https://m.hexun.com/", "roughEstimateOfFCP": 4446, "optimisticFCP": 4446, "pessimisticFCP": 4446, "roughEstimateOfFMP": 4446, "optimisticFMP": 4446, "pessimisticFMP": 4446, "roughEstimateOfTTI": 13386, "optimisticTTI": 9706, "pessimisticTTI": 17067, "roughEstimateOfSI": 11307, "optimisticSI": 3631, "pessimisticSI": 9958, "roughEstimateOfLCP": 5993, "optimisticLCP": 4825, "pessimisticLCP": 7161, "roughEstimateOfTTFB": 931}, - {"url": "https://m.mop.com/", "roughEstimateOfFCP": 2518, "optimisticFCP": 2518, "pessimisticFCP": 2518, "roughEstimateOfFMP": 2518, "optimisticFMP": 2518, "pessimisticFMP": 2518, "roughEstimateOfTTI": 6297, "optimisticTTI": 4869, "pessimisticTTI": 7726, "roughEstimateOfSI": 6124, "optimisticSI": 2399, "pessimisticSI": 4639, "roughEstimateOfLCP": 3548, "optimisticLCP": 3398, "pessimisticLCP": 3698, "roughEstimateOfTTFB": 859}, - {"url": "https://m.sogou.com/", "roughEstimateOfFCP": 2151, "optimisticFCP": 2151, "pessimisticFCP": 2151, "roughEstimateOfFMP": 3077, "optimisticFMP": 2151, "pessimisticFMP": 4002, "roughEstimateOfTTI": 4313, "optimisticTTI": 4199, "pessimisticTTI": 4426, "roughEstimateOfSI": 8305, "optimisticSI": 4734, "pessimisticSI": 2965, "roughEstimateOfLCP": 5123, "optimisticLCP": 4937, "pessimisticLCP": 5309, "roughEstimateOfTTFB": 778}, - {"url": "https://m.youdao.com/", "roughEstimateOfFCP": 1497, "optimisticFCP": 1497, "pessimisticFCP": 1497, "roughEstimateOfFMP": 1497, "optimisticFMP": 1497, "pessimisticFMP": 1497, "roughEstimateOfTTI": 2492, "optimisticTTI": 2348, "pessimisticTTI": 2635, "roughEstimateOfSI": 2371, "optimisticSI": 1152, "pessimisticSI": 1552, "roughEstimateOfLCP": 2304, "optimisticLCP": 2304, "pessimisticLCP": 2304, "roughEstimateOfTTFB": 988}, - {"url": "https://mail.ru/", "roughEstimateOfFCP": 3562, "optimisticFCP": 3562, "pessimisticFCP": 3562, "roughEstimateOfFMP": 3562, "optimisticFMP": 3562, "pessimisticFMP": 3562, "roughEstimateOfTTI": 25479, "optimisticTTI": 19420, "pessimisticTTI": 31539, "roughEstimateOfSI": 9671, "optimisticSI": 2087, "pessimisticSI": 10768, "roughEstimateOfLCP": 4875, "optimisticLCP": 4730, "pessimisticLCP": 5021, "roughEstimateOfTTFB": 763}, - {"url": "https://mobile.twitter.com/", "roughEstimateOfFCP": 1100, "optimisticFCP": 1100, "pessimisticFCP": 1100, "roughEstimateOfFMP": 4843, "optimisticFMP": 4647, "pessimisticFMP": 5039, "roughEstimateOfTTI": 8467, "optimisticTTI": 8387, "pessimisticTTI": 8547, "roughEstimateOfSI": 4462, "optimisticSI": 1283, "pessimisticSI": 4486, "roughEstimateOfLCP": 9326, "optimisticLCP": 9246, "pessimisticLCP": 9406, "roughEstimateOfTTFB": 633}, - {"url": "https://noclip.website/", "roughEstimateOfFCP": 14263, "optimisticFCP": 14263, "pessimisticFCP": 14263, "roughEstimateOfFMP": 14263, "optimisticFMP": 14263, "pessimisticFMP": 14263, "roughEstimateOfTTI": 14726, "optimisticTTI": 14726, "pessimisticTTI": 14726, "roughEstimateOfSI": 14263, "optimisticSI": 606, "pessimisticSI": 14263, "roughEstimateOfLCP": 14790, "optimisticLCP": 14790, "pessimisticLCP": 14790, "roughEstimateOfTTFB": 601}, - {"url": "https://noclip.website/#bk/01;ZNCA8Ac%7d%7b15_%28S%7bMfXPk;;zm%28[o$K3YC;u%5e~P3%7duru4~L~W9l%7d&a79MC%7d=m$v*_8!_6DhC=", "roughEstimateOfFCP": 14253, "optimisticFCP": 14253, "pessimisticFCP": 14253, "roughEstimateOfFMP": 14253, "optimisticFMP": 14253, "pessimisticFMP": 14253, "roughEstimateOfTTI": 14853, "optimisticTTI": 14764, "pessimisticTTI": 14941, "roughEstimateOfSI": 14253, "optimisticSI": 584, "pessimisticSI": 14253, "roughEstimateOfLCP": 14782, "optimisticLCP": 14782, "pessimisticLCP": 14782, "roughEstimateOfTTFB": 600}, - {"url": "https://sfbay.craigslist.org/", "roughEstimateOfFCP": 1519, "optimisticFCP": 1519, "pessimisticFCP": 1519, "roughEstimateOfFMP": 2654, "optimisticFMP": 2654, "pessimisticFMP": 2654, "roughEstimateOfTTI": 2729, "optimisticTTI": 2654, "pessimisticTTI": 2804, "roughEstimateOfSI": 1681, "optimisticSI": 482, "pessimisticSI": 1933, "roughEstimateOfLCP": 1827, "optimisticLCP": 1827, "pessimisticLCP": 1827, "roughEstimateOfTTFB": 604}, - {"url": "https://stripe.com/docs", "roughEstimateOfFCP": 3670, "optimisticFCP": 3670, "pessimisticFCP": 3670, "roughEstimateOfFMP": 3670, "optimisticFMP": 3670, "pessimisticFMP": 3670, "roughEstimateOfTTI": 6893, "optimisticTTI": 6482, "pessimisticTTI": 7304, "roughEstimateOfSI": 4919, "optimisticSI": 1830, "pessimisticSI": 4010, "roughEstimateOfLCP": 4473, "optimisticLCP": 4473, "pessimisticLCP": 4473, "roughEstimateOfTTFB": 1161}, - {"url": "https://wap.sogou.com/", "roughEstimateOfFCP": 2173, "optimisticFCP": 2173, "pessimisticFCP": 2173, "roughEstimateOfFMP": 2992, "optimisticFMP": 2173, "pessimisticFMP": 3812, "roughEstimateOfTTI": 6946, "optimisticTTI": 5404, "pessimisticTTI": 8489, "roughEstimateOfSI": 9543, "optimisticSI": 4895, "pessimisticSI": 4523, "roughEstimateOfLCP": 5067, "optimisticLCP": 4671, "pessimisticLCP": 5463, "roughEstimateOfTTFB": 794}, - {"url": "https://weather.com/", "roughEstimateOfFCP": 3751, "optimisticFCP": 3564, "pessimisticFCP": 3938, "roughEstimateOfFMP": 3751, "optimisticFMP": 3564, "pessimisticFMP": 3938, "roughEstimateOfTTI": 27111, "optimisticTTI": 23242, "pessimisticTTI": 30980, "roughEstimateOfSI": 14582, "optimisticSI": 1582, "pessimisticSI": 19411, "roughEstimateOfLCP": 4125, "optimisticLCP": 3938, "pessimisticLCP": 4312, "roughEstimateOfTTFB": 642}, - {"url": "https://www.4shared.com/", "roughEstimateOfFCP": 3488, "optimisticFCP": 3488, "pessimisticFCP": 3488, "roughEstimateOfFMP": 3997, "optimisticFMP": 3488, "pessimisticFMP": 4506, "roughEstimateOfTTI": 6149, "optimisticTTI": 6063, "pessimisticTTI": 6236, "roughEstimateOfSI": 4146, "optimisticSI": 819, "pessimisticSI": 4999, "roughEstimateOfLCP": 4679, "optimisticLCP": 4679, "pessimisticLCP": 4679, "roughEstimateOfTTFB": 601}, - {"url": "https://www.56.com/", "roughEstimateOfFCP": 2998, "optimisticFCP": 2793, "pessimisticFCP": 3202, "roughEstimateOfFMP": 2998, "optimisticFMP": 2793, "pessimisticFMP": 3202, "roughEstimateOfTTI": 26081, "optimisticTTI": 4098, "pessimisticTTI": 48065, "roughEstimateOfSI": 21686, "optimisticSI": 5195, "pessimisticSI": 22558, "roughEstimateOfLCP": 21914, "optimisticLCP": 5708, "pessimisticLCP": 38119, "roughEstimateOfTTFB": 840}, - {"url": "https://www.addthis.com/", "roughEstimateOfFCP": 2104, "optimisticFCP": 2104, "pessimisticFCP": 2104, "roughEstimateOfFMP": 2104, "optimisticFMP": 2104, "pessimisticFMP": 2104, "roughEstimateOfTTI": 9077, "optimisticTTI": 8624, "pessimisticTTI": 9531, "roughEstimateOfSI": 4925, "optimisticSI": 1375, "pessimisticSI": 5000, "roughEstimateOfLCP": 2625, "optimisticLCP": 2549, "pessimisticLCP": 2701, "roughEstimateOfTTFB": 699}, - {"url": "https://www.alexa.com/", "roughEstimateOfFCP": 3839, "optimisticFCP": 3839, "pessimisticFCP": 3839, "roughEstimateOfFMP": 4507, "optimisticFMP": 4184, "pessimisticFMP": 4831, "roughEstimateOfTTI": 15940, "optimisticTTI": 12033, "pessimisticTTI": 19847, "roughEstimateOfSI": 8347, "optimisticSI": 2373, "pessimisticSI": 8116, "roughEstimateOfLCP": 8852, "optimisticLCP": 8852, "pessimisticLCP": 8852, "roughEstimateOfTTFB": 654}, - {"url": "https://www.amazon.co.jp/", "roughEstimateOfFCP": 2940, "optimisticFCP": 2940, "pessimisticFCP": 2940, "roughEstimateOfFMP": 4042, "optimisticFMP": 2940, "pessimisticFMP": 5143, "roughEstimateOfTTI": 9214, "optimisticTTI": 6002, "pessimisticTTI": 12426, "roughEstimateOfSI": 4648, "optimisticSI": 1079, "pessimisticSI": 5210, "roughEstimateOfLCP": 5192, "optimisticLCP": 4670, "pessimisticLCP": 5714, "roughEstimateOfTTFB": 852}, - {"url": "https://www.att.com/", "roughEstimateOfFCP": 5457, "optimisticFCP": 5005, "pessimisticFCP": 5910, "roughEstimateOfFMP": 5698, "optimisticFMP": 5005, "pessimisticFMP": 6391, "roughEstimateOfTTI": 29995, "optimisticTTI": 27319, "pessimisticTTI": 32671, "roughEstimateOfSI": 9137, "optimisticSI": 1858, "pessimisticSI": 10439, "roughEstimateOfLCP": 13817, "optimisticLCP": 13737, "pessimisticLCP": 13897, "roughEstimateOfTTFB": 651}, - {"url": "https://www.bing.com/", "roughEstimateOfFCP": 962, "optimisticFCP": 962, "pessimisticFCP": 962, "roughEstimateOfFMP": 1339, "optimisticFMP": 962, "pessimisticFMP": 1717, "roughEstimateOfTTI": 2491, "optimisticTTI": 2241, "pessimisticTTI": 2741, "roughEstimateOfSI": 1565, "optimisticSI": 467, "pessimisticSI": 1788, "roughEstimateOfLCP": 1548, "optimisticLCP": 1262, "pessimisticLCP": 1834, "roughEstimateOfTTFB": 608}, - {"url": "https://www.blogger.com/about/", "roughEstimateOfFCP": 1533, "optimisticFCP": 1533, "pessimisticFCP": 1533, "roughEstimateOfFMP": 2106, "optimisticFMP": 1956, "pessimisticFMP": 2256, "roughEstimateOfTTI": 2251, "optimisticTTI": 2222, "pessimisticTTI": 2280, "roughEstimateOfSI": 6828, "optimisticSI": 4188, "pessimisticSI": 1870, "roughEstimateOfLCP": 2385, "optimisticLCP": 2280, "pessimisticLCP": 2489, "roughEstimateOfTTFB": 603}, - {"url": "https://www.cnet.com/", "roughEstimateOfFCP": 2578, "optimisticFCP": 2218, "pessimisticFCP": 2938, "roughEstimateOfFMP": 2814, "optimisticFMP": 2539, "pessimisticFMP": 3089, "roughEstimateOfTTI": 43169, "optimisticTTI": 39862, "pessimisticTTI": 46476, "roughEstimateOfSI": 15832, "optimisticSI": 1339, "pessimisticSI": 21858, "roughEstimateOfLCP": 4265, "optimisticLCP": 4185, "pessimisticLCP": 4346, "roughEstimateOfTTFB": 608}, - {"url": "https://www.codewars.com", "roughEstimateOfFCP": 2248, "optimisticFCP": 2248, "pessimisticFCP": 2248, "roughEstimateOfFMP": 3453, "optimisticFMP": 2422, "pessimisticFMP": 4483, "roughEstimateOfTTI": 8744, "optimisticTTI": 6880, "pessimisticTTI": 10608, "roughEstimateOfSI": 4008, "optimisticSI": 834, "pessimisticSI": 4755, "roughEstimateOfLCP": 9643, "optimisticLCP": 9318, "pessimisticLCP": 9968, "roughEstimateOfTTFB": 609}, - {"url": "https://www.dawn.com/", "roughEstimateOfFCP": 2588, "optimisticFCP": 2262, "pessimisticFCP": 2914, "roughEstimateOfFMP": 2832, "optimisticFMP": 2588, "pessimisticFMP": 3077, "roughEstimateOfTTI": 25693, "optimisticTTI": 23532, "pessimisticTTI": 27855, "roughEstimateOfSI": 10346, "optimisticSI": 1332, "pessimisticSI": 13432, "roughEstimateOfLCP": 3892, "optimisticLCP": 3240, "pessimisticLCP": 4543, "roughEstimateOfTTFB": 652}, - {"url": "https://www.deviantart.com/", "roughEstimateOfFCP": 2926, "optimisticFCP": 2926, "pessimisticFCP": 2926, "roughEstimateOfFMP": 2926, "optimisticFMP": 2926, "pessimisticFMP": 2926, "roughEstimateOfTTI": 13024, "optimisticTTI": 11062, "pessimisticTTI": 14985, "roughEstimateOfSI": 3089, "optimisticSI": 996, "pessimisticSI": 2992, "roughEstimateOfLCP": 11953, "optimisticLCP": 10408, "pessimisticLCP": 13497, "roughEstimateOfTTFB": 1009}, - {"url": "https://www.domaintools.com/", "roughEstimateOfFCP": 3236, "optimisticFCP": 3236, "pessimisticFCP": 3236, "roughEstimateOfFMP": 4819, "optimisticFMP": 3433, "pessimisticFMP": 6205, "roughEstimateOfTTI": 11091, "optimisticTTI": 10421, "pessimisticTTI": 11761, "roughEstimateOfSI": 7243, "optimisticSI": 3235, "pessimisticSI": 4561, "roughEstimateOfLCP": 7585, "optimisticLCP": 7556, "pessimisticLCP": 7615, "roughEstimateOfTTFB": 2351}, - {"url": "https://www.ebay.com/", "roughEstimateOfFCP": 2142, "optimisticFCP": 2142, "pessimisticFCP": 2142, "roughEstimateOfFMP": 2461, "optimisticFMP": 2461, "pessimisticFMP": 2461, "roughEstimateOfTTI": 16537, "optimisticTTI": 14670, "pessimisticTTI": 18404, "roughEstimateOfSI": 4328, "optimisticSI": 628, "pessimisticSI": 5691, "roughEstimateOfLCP": 2940, "optimisticLCP": 2461, "pessimisticLCP": 3419, "roughEstimateOfTTFB": 699}, - {"url": "https://www.ebs.in/IPS/", "roughEstimateOfFCP": 6387, "optimisticFCP": 4297, "pessimisticFCP": 8476, "roughEstimateOfFMP": 7012, "optimisticFMP": 4724, "pessimisticFMP": 9300, "roughEstimateOfTTI": 14305, "optimisticTTI": 7051, "pessimisticTTI": 21558, "roughEstimateOfSI": 13446, "optimisticSI": 4003, "pessimisticSI": 12448, "roughEstimateOfLCP": 10910, "optimisticLCP": 5960, "pessimisticLCP": 15860, "roughEstimateOfTTFB": 1223}, - {"url": "https://www.espn.com/", "roughEstimateOfFCP": 3910, "optimisticFCP": 3910, "pessimisticFCP": 3910, "roughEstimateOfFMP": 5320, "optimisticFMP": 3910, "pessimisticFMP": 6731, "roughEstimateOfTTI": 36173, "optimisticTTI": 33514, "pessimisticTTI": 38831, "roughEstimateOfSI": 13299, "optimisticSI": 2989, "pessimisticSI": 14407, "roughEstimateOfLCP": 7771, "optimisticLCP": 7371, "pessimisticLCP": 8171, "roughEstimateOfTTFB": 637}, - {"url": "https://www.flipkart.com", "roughEstimateOfFCP": 2367, "optimisticFCP": 2367, "pessimisticFCP": 2367, "roughEstimateOfFMP": 3939, "optimisticFMP": 2528, "pessimisticFMP": 5349, "roughEstimateOfTTI": 12626, "optimisticTTI": 10335, "pessimisticTTI": 14916, "roughEstimateOfSI": 7403, "optimisticSI": 3188, "pessimisticSI": 4907, "roughEstimateOfLCP": 11670, "optimisticLCP": 10673, "pessimisticLCP": 12667, "roughEstimateOfTTFB": 922}, - {"url": "https://www.foxnews.com/", "roughEstimateOfFCP": 3692, "optimisticFCP": 3692, "pessimisticFCP": 3692, "roughEstimateOfFMP": 3692, "optimisticFMP": 3692, "pessimisticFMP": 3692, "roughEstimateOfTTI": 23862, "optimisticTTI": 20278, "pessimisticTTI": 27445, "roughEstimateOfSI": 12440, "optimisticSI": 1187, "pessimisticSI": 16966, "roughEstimateOfLCP": 5682, "optimisticLCP": 5523, "pessimisticLCP": 5841, "roughEstimateOfTTFB": 634}, - {"url": "https://www.gmx.net/", "roughEstimateOfFCP": 2345, "optimisticFCP": 2345, "pessimisticFCP": 2345, "roughEstimateOfFMP": 2345, "optimisticFMP": 2345, "pessimisticFMP": 2345, "roughEstimateOfTTI": 10267, "optimisticTTI": 9788, "pessimisticTTI": 10746, "roughEstimateOfSI": 4452, "optimisticSI": 1327, "pessimisticSI": 4376, "roughEstimateOfLCP": 6975, "optimisticLCP": 6954, "pessimisticLCP": 6997, "roughEstimateOfTTFB": 611}, - {"url": "https://www.hatena.ne.jp/", "roughEstimateOfFCP": 1743, "optimisticFCP": 1743, "pessimisticFCP": 1743, "roughEstimateOfFMP": 2768, "optimisticFMP": 2265, "pessimisticFMP": 3272, "roughEstimateOfTTI": 15722, "optimisticTTI": 12460, "pessimisticTTI": 18985, "roughEstimateOfSI": 9002, "optimisticSI": 2323, "pessimisticSI": 9230, "roughEstimateOfLCP": 5595, "optimisticLCP": 4758, "pessimisticLCP": 6433, "roughEstimateOfTTFB": 877}, - {"url": "https://www.hulu.com/welcome", "roughEstimateOfFCP": 3938, "optimisticFCP": 3777, "pessimisticFCP": 4098, "roughEstimateOfFMP": 8045, "optimisticFMP": 7724, "pessimisticFMP": 8366, "roughEstimateOfTTI": 16748, "optimisticTTI": 15598, "pessimisticTTI": 17897, "roughEstimateOfSI": 5944, "optimisticSI": 920, "pessimisticSI": 7547, "roughEstimateOfLCP": 4098, "optimisticLCP": 4098, "pessimisticLCP": 4098, "roughEstimateOfTTFB": 612}, - {"url": "https://www.ifeng.com/", "roughEstimateOfFCP": 5148, "optimisticFCP": 5148, "pessimisticFCP": 5148, "roughEstimateOfFMP": 5148, "optimisticFMP": 5148, "pessimisticFMP": 5148, "roughEstimateOfTTI": 6096, "optimisticTTI": 5864, "pessimisticTTI": 6329, "roughEstimateOfSI": 7291, "optimisticSI": 2997, "pessimisticSI": 5148, "roughEstimateOfLCP": 5556, "optimisticLCP": 5556, "pessimisticLCP": 5556, "roughEstimateOfTTFB": 1653}, - {"url": "https://www.imageshack.us/login", "roughEstimateOfFCP": 2311, "optimisticFCP": 2310, "pessimisticFCP": 2313, "roughEstimateOfFMP": 2311, "optimisticFMP": 2310, "pessimisticFMP": 2313, "roughEstimateOfTTI": 7818, "optimisticTTI": 7670, "pessimisticTTI": 7965, "roughEstimateOfSI": 4718, "optimisticSI": 1491, "pessimisticSI": 4433, "roughEstimateOfLCP": 3652, "optimisticLCP": 3466, "pessimisticLCP": 3838, "roughEstimateOfTTFB": 603}, - {"url": "https://www.instagram.com/", "roughEstimateOfFCP": 1103, "optimisticFCP": 1103, "pessimisticFCP": 1103, "roughEstimateOfFMP": 3688, "optimisticFMP": 3688, "pessimisticFMP": 3688, "roughEstimateOfTTI": 5845, "optimisticTTI": 5216, "pessimisticTTI": 6475, "roughEstimateOfSI": 2900, "optimisticSI": 822, "pessimisticSI": 3077, "roughEstimateOfLCP": 5169, "optimisticLCP": 5089, "pessimisticLCP": 5248, "roughEstimateOfTTFB": 606}, - {"url": "https://www.irs.gov/", "roughEstimateOfFCP": 2022, "optimisticFCP": 2022, "pessimisticFCP": 2022, "roughEstimateOfFMP": 3229, "optimisticFMP": 2788, "pessimisticFMP": 3670, "roughEstimateOfTTI": 15209, "optimisticTTI": 13822, "pessimisticTTI": 16596, "roughEstimateOfSI": 4959, "optimisticSI": 818, "pessimisticSI": 6252, "roughEstimateOfLCP": 4458, "optimisticLCP": 3884, "pessimisticLCP": 5031, "roughEstimateOfTTFB": 684}, - {"url": "https://www.java.com/en/", "roughEstimateOfFCP": 961, "optimisticFCP": 961, "pessimisticFCP": 961, "roughEstimateOfFMP": 961, "optimisticFMP": 961, "pessimisticFMP": 961, "roughEstimateOfTTI": 3252, "optimisticTTI": 3102, "pessimisticTTI": 3402, "roughEstimateOfSI": 1207, "optimisticSI": 484, "pessimisticSI": 1199, "roughEstimateOfLCP": 3050, "optimisticLCP": 3050, "pessimisticLCP": 3050, "roughEstimateOfTTFB": 643}, - {"url": "https://www.linkedin.com/", "roughEstimateOfFCP": 1903, "optimisticFCP": 1903, "pessimisticFCP": 1903, "roughEstimateOfFMP": 1903, "optimisticFMP": 1903, "pessimisticFMP": 1903, "roughEstimateOfTTI": 11294, "optimisticTTI": 9700, "pessimisticTTI": 12888, "roughEstimateOfSI": 2073, "optimisticSI": 655, "pessimisticSI": 2164, "roughEstimateOfLCP": 2196, "optimisticLCP": 2155, "pessimisticLCP": 2237, "roughEstimateOfTTFB": 656}, - {"url": "https://www.metacafe.com/", "roughEstimateOfFCP": 1908, "optimisticFCP": 1908, "pessimisticFCP": 1908, "roughEstimateOfFMP": 1908, "optimisticFMP": 1908, "pessimisticFMP": 1908, "roughEstimateOfTTI": 6319, "optimisticTTI": 5841, "pessimisticTTI": 6796, "roughEstimateOfSI": 3459, "optimisticSI": 769, "pessimisticSI": 4050, "roughEstimateOfLCP": 4892, "optimisticLCP": 4892, "pessimisticLCP": 4892, "roughEstimateOfTTFB": 621}, - {"url": "https://www.mgid.com/ru", "roughEstimateOfFCP": 2063, "optimisticFCP": 2063, "pessimisticFCP": 2063, "roughEstimateOfFMP": 4696, "optimisticFMP": 4213, "pessimisticFMP": 5179, "roughEstimateOfTTI": 16185, "optimisticTTI": 15114, "pessimisticTTI": 17256, "roughEstimateOfSI": 6981, "optimisticSI": 983, "pessimisticSI": 9007, "roughEstimateOfLCP": 8564, "optimisticLCP": 8242, "pessimisticLCP": 8886, "roughEstimateOfTTFB": 648}, - {"url": "https://www.mlb.com/", "roughEstimateOfFCP": 3034, "optimisticFCP": 3034, "pessimisticFCP": 3034, "roughEstimateOfFMP": 3034, "optimisticFMP": 3034, "pessimisticFMP": 3034, "roughEstimateOfTTI": 38403, "optimisticTTI": 30243, "pessimisticTTI": 46563, "roughEstimateOfSI": 19293, "optimisticSI": 1316, "pessimisticSI": 27233, "roughEstimateOfLCP": 4649, "optimisticLCP": 4326, "pessimisticLCP": 4972, "roughEstimateOfTTFB": 604}, - {"url": "https://www.mozilla.org/en-US/", "roughEstimateOfFCP": 2359, "optimisticFCP": 2359, "pessimisticFCP": 2359, "roughEstimateOfFMP": 2359, "optimisticFMP": 2359, "pessimisticFMP": 2359, "roughEstimateOfTTI": 5974, "optimisticTTI": 5595, "pessimisticTTI": 6353, "roughEstimateOfSI": 3038, "optimisticSI": 801, "pessimisticSI": 3334, "roughEstimateOfLCP": 5913, "optimisticLCP": 5596, "pessimisticLCP": 6229, "roughEstimateOfTTFB": 607}, - {"url": "https://www.msn.com/", "roughEstimateOfFCP": 2174, "optimisticFCP": 2094, "pessimisticFCP": 2255, "roughEstimateOfFMP": 2521, "optimisticFMP": 2094, "pessimisticFMP": 2948, "roughEstimateOfTTI": 11300, "optimisticTTI": 10051, "pessimisticTTI": 12548, "roughEstimateOfSI": 5459, "optimisticSI": 1381, "pessimisticSI": 5809, "roughEstimateOfLCP": 3317, "optimisticLCP": 3204, "pessimisticLCP": 3430, "roughEstimateOfTTFB": 637}, - {"url": "https://www.netflix.com/", "roughEstimateOfFCP": 4341, "optimisticFCP": 4341, "pessimisticFCP": 4341, "roughEstimateOfFMP": 5453, "optimisticFMP": 5391, "pessimisticFMP": 5514, "roughEstimateOfTTI": 8070, "optimisticTTI": 5724, "pessimisticTTI": 10415, "roughEstimateOfSI": 4440, "optimisticSI": 871, "pessimisticSI": 5340, "roughEstimateOfLCP": 6896, "optimisticLCP": 6296, "pessimisticLCP": 7496, "roughEstimateOfTTFB": 609}, - {"url": "https://www.nih.gov/", "roughEstimateOfFCP": 4196, "optimisticFCP": 4150, "pessimisticFCP": 4242, "roughEstimateOfFMP": 4941, "optimisticFMP": 4397, "pessimisticFMP": 5485, "roughEstimateOfTTI": 6516, "optimisticTTI": 5680, "pessimisticTTI": 7352, "roughEstimateOfSI": 4562, "optimisticSI": 830, "pessimisticSI": 5615, "roughEstimateOfLCP": 6709, "optimisticLCP": 6028, "pessimisticLCP": 7391, "roughEstimateOfTTFB": 604}, - {"url": "https://www.ning.com/", "roughEstimateOfFCP": 2106, "optimisticFCP": 2106, "pessimisticFCP": 2106, "roughEstimateOfFMP": 3212, "optimisticFMP": 2497, "pessimisticFMP": 3927, "roughEstimateOfTTI": 17382, "optimisticTTI": 14542, "pessimisticTTI": 20222, "roughEstimateOfSI": 7398, "optimisticSI": 1385, "pessimisticSI": 8783, "roughEstimateOfLCP": 5502, "optimisticLCP": 4524, "pessimisticLCP": 6480, "roughEstimateOfTTFB": 601}, - {"url": "https://www.nokia.com/", "roughEstimateOfFCP": 2460, "optimisticFCP": 2460, "pessimisticFCP": 2460, "roughEstimateOfFMP": 2460, "optimisticFMP": 2460, "pessimisticFMP": 2460, "roughEstimateOfTTI": 12447, "optimisticTTI": 11923, "pessimisticTTI": 12971, "roughEstimateOfSI": 5446, "optimisticSI": 1367, "pessimisticSI": 5819, "roughEstimateOfLCP": 6452, "optimisticLCP": 6452, "pessimisticLCP": 6452, "roughEstimateOfTTFB": 614}, - {"url": "https://www.ocn.ne.jp/", "roughEstimateOfFCP": 3720, "optimisticFCP": 3720, "pessimisticFCP": 3720, "roughEstimateOfFMP": 3720, "optimisticFMP": 3720, "pessimisticFMP": 3720, "roughEstimateOfTTI": 10647, "optimisticTTI": 9684, "pessimisticTTI": 11610, "roughEstimateOfSI": 6092, "optimisticSI": 2266, "pessimisticSI": 4877, "roughEstimateOfLCP": 4726, "optimisticLCP": 4484, "pessimisticLCP": 4969, "roughEstimateOfTTFB": 1581}, - {"url": "https://www.onet.pl/", "roughEstimateOfFCP": 2078, "optimisticFCP": 2078, "pessimisticFCP": 2078, "roughEstimateOfFMP": 2078, "optimisticFMP": 2078, "pessimisticFMP": 2078, "roughEstimateOfTTI": 11869, "optimisticTTI": 11083, "pessimisticTTI": 12655, "roughEstimateOfSI": 5401, "optimisticSI": 1759, "pessimisticSI": 4906, "roughEstimateOfLCP": 3834, "optimisticLCP": 3834, "pessimisticLCP": 3834, "roughEstimateOfTTFB": 600}, - {"url": "https://www.orange.fr/portail", "roughEstimateOfFCP": 4085, "optimisticFCP": 3000, "pessimisticFCP": 5170, "roughEstimateOfFMP": 5055, "optimisticFMP": 3459, "pessimisticFMP": 6652, "roughEstimateOfTTI": 18175, "optimisticTTI": 16766, "pessimisticTTI": 19583, "roughEstimateOfSI": 10547, "optimisticSI": 3925, "pessimisticSI": 8158, "roughEstimateOfLCP": 6874, "optimisticLCP": 6260, "pessimisticLCP": 7489, "roughEstimateOfTTFB": 880}, - {"url": "https://www.partypoker.com/", "roughEstimateOfFCP": 4990, "optimisticFCP": 4990, "pessimisticFCP": 4990, "roughEstimateOfFMP": 4990, "optimisticFMP": 4990, "pessimisticFMP": 4990, "roughEstimateOfTTI": 7253, "optimisticTTI": 5396, "pessimisticTTI": 9111, "roughEstimateOfSI": 6766, "optimisticSI": 2695, "pessimisticSI": 4990, "roughEstimateOfLCP": 7009, "optimisticLCP": 5152, "pessimisticLCP": 8867, "roughEstimateOfTTFB": 1094}, - {"url": "https://www.rakuten.co.jp/", "roughEstimateOfFCP": 3165, "optimisticFCP": 3165, "pessimisticFCP": 3165, "roughEstimateOfFMP": 5641, "optimisticFMP": 3165, "pessimisticFMP": 8117, "roughEstimateOfTTI": 26607, "optimisticTTI": 19609, "pessimisticTTI": 33604, "roughEstimateOfSI": 12192, "optimisticSI": 4212, "pessimisticSI": 10069, "roughEstimateOfLCP": 8521, "optimisticLCP": 8121, "pessimisticLCP": 8921, "roughEstimateOfTTFB": 698}, - {"url": "https://www.reddit.com/", "roughEstimateOfFCP": 2375, "optimisticFCP": 2296, "pessimisticFCP": 2455, "roughEstimateOfFMP": 7729, "optimisticFMP": 5762, "pessimisticFMP": 9695, "roughEstimateOfTTI": 12360, "optimisticTTI": 11062, "pessimisticTTI": 13658, "roughEstimateOfSI": 8400, "optimisticSI": 3340, "pessimisticSI": 6113, "roughEstimateOfLCP": 10681, "optimisticLCP": 9048, "pessimisticLCP": 12313, "roughEstimateOfTTFB": 1017}, - {"url": "https://www.scribd.com/", "roughEstimateOfFCP": 2099, "optimisticFCP": 2099, "pessimisticFCP": 2099, "roughEstimateOfFMP": 2099, "optimisticFMP": 2099, "pessimisticFMP": 2099, "roughEstimateOfTTI": 10601, "optimisticTTI": 9860, "pessimisticTTI": 11343, "roughEstimateOfSI": 4315, "optimisticSI": 873, "pessimisticSI": 5143, "roughEstimateOfLCP": 8528, "optimisticLCP": 7621, "pessimisticLCP": 9435, "roughEstimateOfTTFB": 635}, - {"url": "https://www.shopping.com/", "roughEstimateOfFCP": 2882, "optimisticFCP": 2488, "pessimisticFCP": 3277, "roughEstimateOfFMP": 2882, "optimisticFMP": 2488, "pessimisticFMP": 3277, "roughEstimateOfTTI": 5569, "optimisticTTI": 5146, "pessimisticTTI": 5991, "roughEstimateOfSI": 3675, "optimisticSI": 1210, "pessimisticSI": 3433, "roughEstimateOfLCP": 4449, "optimisticLCP": 4342, "pessimisticLCP": 4557, "roughEstimateOfTTFB": 612}, - {"url": "https://www.skype.com/en/", "roughEstimateOfFCP": 2614, "optimisticFCP": 2614, "pessimisticFCP": 2614, "roughEstimateOfFMP": 2862, "optimisticFMP": 2614, "pessimisticFMP": 3109, "roughEstimateOfTTI": 6534, "optimisticTTI": 5792, "pessimisticTTI": 7275, "roughEstimateOfSI": 4026, "optimisticSI": 1120, "pessimisticSI": 4165, "roughEstimateOfLCP": 4962, "optimisticLCP": 4878, "pessimisticLCP": 5046, "roughEstimateOfTTFB": 716}, - {"url": "https://www.so-net.ne.jp/m/", "roughEstimateOfFCP": 4202, "optimisticFCP": 3225, "pessimisticFCP": 5179, "roughEstimateOfFMP": 4202, "optimisticFMP": 3225, "pessimisticFMP": 5179, "roughEstimateOfTTI": 9002, "optimisticTTI": 7027, "pessimisticTTI": 10976, "roughEstimateOfSI": 8095, "optimisticSI": 2439, "pessimisticSI": 7585, "roughEstimateOfLCP": 8108, "optimisticLCP": 6910, "pessimisticLCP": 9306, "roughEstimateOfTTFB": 612}, - {"url": "https://www.symantec.com/", "roughEstimateOfFCP": 3489, "optimisticFCP": 3303, "pessimisticFCP": 3675, "roughEstimateOfFMP": 3503, "optimisticFMP": 3303, "pessimisticFMP": 3703, "roughEstimateOfTTI": 11676, "optimisticTTI": 9061, "pessimisticTTI": 14291, "roughEstimateOfSI": 6918, "optimisticSI": 2165, "pessimisticSI": 6364, "roughEstimateOfLCP": 9914, "optimisticLCP": 8374, "pessimisticLCP": 11454, "roughEstimateOfTTFB": 666}, - {"url": "https://www.thestar.com.my/", "roughEstimateOfFCP": 3657, "optimisticFCP": 2259, "pessimisticFCP": 5056, "roughEstimateOfFMP": 3657, "optimisticFMP": 2259, "pessimisticFMP": 5056, "roughEstimateOfTTI": 23223, "optimisticTTI": 18899, "pessimisticTTI": 27547, "roughEstimateOfSI": 15176, "optimisticSI": 5315, "pessimisticSI": 12286, "roughEstimateOfLCP": 13919, "optimisticLCP": 12412, "pessimisticLCP": 15425, "roughEstimateOfTTFB": 979}, - {"url": "https://www.tianya.cn/m/", "roughEstimateOfFCP": 3505, "optimisticFCP": 3505, "pessimisticFCP": 3505, "roughEstimateOfFMP": 3577, "optimisticFMP": 3505, "pessimisticFMP": 3650, "roughEstimateOfTTI": 5341, "optimisticTTI": 5020, "pessimisticTTI": 5663, "roughEstimateOfSI": 14425, "optimisticSI": 8681, "pessimisticSI": 3880, "roughEstimateOfLCP": 7302, "optimisticLCP": 7050, "pessimisticLCP": 7555, "roughEstimateOfTTFB": 871}, - {"url": "https://www.torrentz.com/", "roughEstimateOfFCP": 817, "optimisticFCP": 817, "pessimisticFCP": 817, "roughEstimateOfFMP": 817, "optimisticFMP": 817, "pessimisticFMP": 817, "roughEstimateOfTTI": 817, "optimisticTTI": 817, "pessimisticTTI": 817, "roughEstimateOfSI": 863, "optimisticSI": 416, "pessimisticSI": 817, "roughEstimateOfLCP": 817, "optimisticLCP": 817, "pessimisticLCP": 817, "roughEstimateOfTTFB": 608}, - {"url": "https://www.tumblr.com/", "roughEstimateOfFCP": 2508, "optimisticFCP": 2508, "pessimisticFCP": 2508, "roughEstimateOfFMP": 2508, "optimisticFMP": 2508, "pessimisticFMP": 2508, "roughEstimateOfTTI": 9689, "optimisticTTI": 9611, "pessimisticTTI": 9767, "roughEstimateOfSI": 4128, "optimisticSI": 628, "pessimisticSI": 5382, "roughEstimateOfLCP": 8679, "optimisticLCP": 8679, "pessimisticLCP": 8679, "roughEstimateOfTTFB": 637}, + {"url": "http://m.iciba.com", "roughEstimateOfFCP": 1744, "optimisticFCP": 1744, "pessimisticFCP": 1744, "roughEstimateOfFMP": 1744, "optimisticFMP": 1744, "pessimisticFMP": 1744, "roughEstimateOfTTI": 6690, "optimisticTTI": 3338, "pessimisticTTI": 9432, "roughEstimateOfSI": 8431, "optimisticSI": 4764, "pessimisticSI": 4403, "roughEstimateOfLCP": 9428, "optimisticLCP": 9169, "pessimisticLCP": 9687, "roughEstimateOfTTFB": 685}, + {"url": "http://www.zol.com.cn/", "roughEstimateOfFCP": 3447, "optimisticFCP": 3447, "pessimisticFCP": 3447, "roughEstimateOfFMP": 3447, "optimisticFMP": 3447, "pessimisticFMP": 3447, "roughEstimateOfTTI": 17512, "optimisticTTI": 16023, "pessimisticTTI": 18731, "roughEstimateOfSI": 10555, "optimisticSI": 4861, "pessimisticSI": 9375, "roughEstimateOfLCP": 4282, "optimisticLCP": 4194, "pessimisticLCP": 4369, "roughEstimateOfTTFB": 648}, + {"url": "https://birdsarentreal.com", "roughEstimateOfFCP": 2962, "optimisticFCP": 2962, "pessimisticFCP": 2962, "roughEstimateOfFMP": 3448, "optimisticFMP": 3124, "pessimisticFMP": 3772, "roughEstimateOfTTI": 14226, "optimisticTTI": 12107, "pessimisticTTI": 15960, "roughEstimateOfSI": 4113, "optimisticSI": 1323, "pessimisticSI": 5652, "roughEstimateOfLCP": 7958, "optimisticLCP": 6986, "pessimisticLCP": 8931, "roughEstimateOfTTFB": 701}, + {"url": "https://depositfiles.com/", "roughEstimateOfFCP": 5098, "optimisticFCP": 5098, "pessimisticFCP": 5098, "roughEstimateOfFMP": 5486, "optimisticFMP": 5098, "pessimisticFMP": 5874, "roughEstimateOfTTI": 5994, "optimisticTTI": 5854, "pessimisticTTI": 6109, "roughEstimateOfSI": 6311, "optimisticSI": 2787, "pessimisticSI": 6025, "roughEstimateOfLCP": 6034, "optimisticLCP": 6034, "pessimisticLCP": 6034, "roughEstimateOfTTFB": 907}, + {"url": "https://en-maktoob.yahoo.com/?p=xa", "roughEstimateOfFCP": 1410, "optimisticFCP": 1410, "pessimisticFCP": 1410, "roughEstimateOfFMP": 1427, "optimisticFMP": 1410, "pessimisticFMP": 1443, "roughEstimateOfTTI": 6029, "optimisticTTI": 5167, "pessimisticTTI": 6734, "roughEstimateOfSI": 3017, "optimisticSI": 1039, "pessimisticSI": 3907, "roughEstimateOfLCP": 7413, "optimisticLCP": 7090, "pessimisticLCP": 7736, "roughEstimateOfTTFB": 618}, + {"url": "https://en.softonic.com", "roughEstimateOfFCP": 2191, "optimisticFCP": 2191, "pessimisticFCP": 2191, "roughEstimateOfFMP": 2584, "optimisticFMP": 2191, "pessimisticFMP": 2977, "roughEstimateOfTTI": 32728, "optimisticTTI": 27015, "pessimisticTTI": 37403, "roughEstimateOfSI": 9468, "optimisticSI": 3067, "pessimisticSI": 12935, "roughEstimateOfLCP": 3915, "optimisticLCP": 3504, "pessimisticLCP": 4325, "roughEstimateOfTTFB": 899}, + {"url": "https://gm.58.com/glsanfrancisco-sl/", "roughEstimateOfFCP": 3019, "optimisticFCP": 3019, "pessimisticFCP": 3019, "roughEstimateOfFMP": 3019, "optimisticFMP": 3019, "pessimisticFMP": 3019, "roughEstimateOfTTI": 4857, "optimisticTTI": 4436, "pessimisticTTI": 5201, "roughEstimateOfSI": 3955, "optimisticSI": 1762, "pessimisticSI": 3722, "roughEstimateOfLCP": 5405, "optimisticLCP": 5045, "pessimisticLCP": 5766, "roughEstimateOfTTFB": 787}, + {"url": "https://m.facebook.com/", "roughEstimateOfFCP": 2407, "optimisticFCP": 2407, "pessimisticFCP": 2407, "roughEstimateOfFMP": 2407, "optimisticFMP": 2407, "pessimisticFMP": 2407, "roughEstimateOfTTI": 4905, "optimisticTTI": 4217, "pessimisticTTI": 5467, "roughEstimateOfSI": 2407, "optimisticSI": 479, "pessimisticSI": 3488, "roughEstimateOfLCP": 3467, "optimisticLCP": 3391, "pessimisticLCP": 3542, "roughEstimateOfTTFB": 626}, + {"url": "https://m.hexun.com/", "roughEstimateOfFCP": 5126, "optimisticFCP": 5126, "pessimisticFCP": 5126, "roughEstimateOfFMP": 5126, "optimisticFMP": 5126, "pessimisticFMP": 5126, "roughEstimateOfTTI": 14381, "optimisticTTI": 9706, "pessimisticTTI": 18207, "roughEstimateOfSI": 9413, "optimisticSI": 3631, "pessimisticSI": 10823, "roughEstimateOfLCP": 6474, "optimisticLCP": 5453, "pessimisticLCP": 7495, "roughEstimateOfTTFB": 931}, + {"url": "https://m.mop.com/", "roughEstimateOfFCP": 2518, "optimisticFCP": 2518, "pessimisticFCP": 2518, "roughEstimateOfFMP": 2518, "optimisticFMP": 2518, "pessimisticFMP": 2518, "roughEstimateOfTTI": 6517, "optimisticTTI": 4869, "pessimisticTTI": 7866, "roughEstimateOfSI": 5201, "optimisticSI": 2399, "pessimisticSI": 4604, "roughEstimateOfLCP": 3456, "optimisticLCP": 3398, "pessimisticLCP": 3514, "roughEstimateOfTTFB": 859}, + {"url": "https://m.sogou.com/", "roughEstimateOfFCP": 2151, "optimisticFCP": 2151, "pessimisticFCP": 2151, "roughEstimateOfFMP": 3178, "optimisticFMP": 2151, "pessimisticFMP": 4205, "roughEstimateOfTTI": 4226, "optimisticTTI": 4199, "pessimisticTTI": 4248, "roughEstimateOfSI": 7788, "optimisticSI": 4734, "pessimisticSI": 2901, "roughEstimateOfLCP": 5013, "optimisticLCP": 4937, "pessimisticLCP": 5088, "roughEstimateOfTTFB": 778}, + {"url": "https://m.youdao.com/", "roughEstimateOfFCP": 1497, "optimisticFCP": 1497, "pessimisticFCP": 1497, "roughEstimateOfFMP": 1497, "optimisticFMP": 1497, "pessimisticFMP": 1497, "roughEstimateOfTTI": 2506, "optimisticTTI": 2348, "pessimisticTTI": 2635, "roughEstimateOfSI": 2233, "optimisticSI": 1152, "pessimisticSI": 1552, "roughEstimateOfLCP": 2304, "optimisticLCP": 2304, "pessimisticLCP": 2304, "roughEstimateOfTTFB": 988}, + {"url": "https://mail.ru/", "roughEstimateOfFCP": 3562, "optimisticFCP": 3562, "pessimisticFCP": 3562, "roughEstimateOfFMP": 3562, "optimisticFMP": 3562, "pessimisticFMP": 3562, "roughEstimateOfTTI": 27654, "optimisticTTI": 19420, "pessimisticTTI": 34391, "roughEstimateOfSI": 7552, "optimisticSI": 2087, "pessimisticSI": 11574, "roughEstimateOfLCP": 4875, "optimisticLCP": 4730, "pessimisticLCP": 5021, "roughEstimateOfTTFB": 763}, + {"url": "https://mobile.twitter.com/", "roughEstimateOfFCP": 1100, "optimisticFCP": 1100, "pessimisticFCP": 1100, "roughEstimateOfFMP": 4843, "optimisticFMP": 4647, "pessimisticFMP": 5039, "roughEstimateOfTTI": 8547, "optimisticTTI": 8547, "pessimisticTTI": 8547, "roughEstimateOfSI": 3646, "optimisticSI": 1283, "pessimisticSI": 4625, "roughEstimateOfLCP": 9406, "optimisticLCP": 9406, "pessimisticLCP": 9406, "roughEstimateOfTTFB": 633}, + {"url": "https://noclip.website/", "roughEstimateOfFCP": 14263, "optimisticFCP": 14263, "pessimisticFCP": 14263, "roughEstimateOfFMP": 14263, "optimisticFMP": 14263, "pessimisticFMP": 14263, "roughEstimateOfTTI": 15176, "optimisticTTI": 15141, "pessimisticTTI": 15205, "roughEstimateOfSI": 14263, "optimisticSI": 606, "pessimisticSI": 14263, "roughEstimateOfLCP": 14790, "optimisticLCP": 14790, "pessimisticLCP": 14790, "roughEstimateOfTTFB": 601}, + {"url": "https://noclip.website/#bk/01;ZNCA8Ac%7d%7b15_%28S%7bMfXPk;;zm%28[o$K3YC;u%5e~P3%7duru4~L~W9l%7d&a79MC%7d=m$v*_8!_6DhC=", "roughEstimateOfFCP": 14253, "optimisticFCP": 14253, "pessimisticFCP": 14253, "roughEstimateOfFMP": 14253, "optimisticFMP": 14253, "pessimisticFMP": 14253, "roughEstimateOfTTI": 15000, "optimisticTTI": 14958, "pessimisticTTI": 15034, "roughEstimateOfSI": 14253, "optimisticSI": 584, "pessimisticSI": 14253, "roughEstimateOfLCP": 14782, "optimisticLCP": 14782, "pessimisticLCP": 14782, "roughEstimateOfTTFB": 600}, + {"url": "https://sfbay.craigslist.org/", "roughEstimateOfFCP": 1519, "optimisticFCP": 1519, "pessimisticFCP": 1519, "roughEstimateOfFMP": 2654, "optimisticFMP": 2654, "pessimisticFMP": 2654, "roughEstimateOfTTI": 2823, "optimisticTTI": 2654, "pessimisticTTI": 2962, "roughEstimateOfSI": 1519, "optimisticSI": 482, "pessimisticSI": 1985, "roughEstimateOfLCP": 1969, "optimisticLCP": 1969, "pessimisticLCP": 1969, "roughEstimateOfTTFB": 604}, + {"url": "https://stripe.com/docs", "roughEstimateOfFCP": 3670, "optimisticFCP": 3670, "pessimisticFCP": 3670, "roughEstimateOfFMP": 3670, "optimisticFMP": 3670, "pessimisticFMP": 3670, "roughEstimateOfTTI": 6934, "optimisticTTI": 6482, "pessimisticTTI": 7304, "roughEstimateOfSI": 4166, "optimisticSI": 1830, "pessimisticSI": 4010, "roughEstimateOfLCP": 4473, "optimisticLCP": 4473, "pessimisticLCP": 4473, "roughEstimateOfTTFB": 1161}, + {"url": "https://wap.sogou.com/", "roughEstimateOfFCP": 2173, "optimisticFCP": 2173, "pessimisticFCP": 2173, "roughEstimateOfFMP": 2984, "optimisticFMP": 2173, "pessimisticFMP": 3795, "roughEstimateOfTTI": 5622, "optimisticTTI": 5404, "pessimisticTTI": 5800, "roughEstimateOfSI": 8298, "optimisticSI": 4895, "pessimisticSI": 3614, "roughEstimateOfLCP": 4521, "optimisticLCP": 4671, "pessimisticLCP": 4371, "roughEstimateOfTTFB": 794}, + {"url": "https://weather.com/", "roughEstimateOfFCP": 3751, "optimisticFCP": 3564, "pessimisticFCP": 3938, "roughEstimateOfFMP": 3751, "optimisticFMP": 3564, "pessimisticFMP": 3938, "roughEstimateOfTTI": 26889, "optimisticTTI": 23242, "pessimisticTTI": 29873, "roughEstimateOfSI": 10153, "optimisticSI": 1582, "pessimisticSI": 19843, "roughEstimateOfLCP": 4125, "optimisticLCP": 3938, "pessimisticLCP": 4312, "roughEstimateOfTTFB": 642}, + {"url": "https://www.4shared.com/", "roughEstimateOfFCP": 3488, "optimisticFCP": 3488, "pessimisticFCP": 3488, "roughEstimateOfFMP": 3997, "optimisticFMP": 3488, "pessimisticFMP": 4506, "roughEstimateOfTTI": 6063, "optimisticTTI": 6063, "pessimisticTTI": 6063, "roughEstimateOfSI": 3488, "optimisticSI": 819, "pessimisticSI": 4877, "roughEstimateOfLCP": 4679, "optimisticLCP": 4679, "pessimisticLCP": 4679, "roughEstimateOfTTFB": 601}, + {"url": "https://www.56.com/", "roughEstimateOfFCP": 3265, "optimisticFCP": 2971, "pessimisticFCP": 3558, "roughEstimateOfFMP": 3265, "optimisticFMP": 2971, "pessimisticFMP": 3558, "roughEstimateOfTTI": 28552, "optimisticTTI": 4455, "pessimisticTTI": 48268, "roughEstimateOfSI": 16410, "optimisticSI": 5195, "pessimisticSI": 22840, "roughEstimateOfLCP": 22127, "optimisticLCP": 5885, "pessimisticLCP": 38370, "roughEstimateOfTTFB": 840}, + {"url": "https://www.addthis.com/", "roughEstimateOfFCP": 2104, "optimisticFCP": 2104, "pessimisticFCP": 2104, "roughEstimateOfFMP": 2104, "optimisticFMP": 2104, "pessimisticFMP": 2104, "roughEstimateOfTTI": 9203, "optimisticTTI": 8624, "pessimisticTTI": 9676, "roughEstimateOfSI": 3947, "optimisticSI": 1375, "pessimisticSI": 5055, "roughEstimateOfLCP": 2625, "optimisticLCP": 2549, "pessimisticLCP": 2701, "roughEstimateOfTTFB": 699}, + {"url": "https://www.alexa.com/", "roughEstimateOfFCP": 3839, "optimisticFCP": 3839, "pessimisticFCP": 3839, "roughEstimateOfFMP": 4482, "optimisticFMP": 4184, "pessimisticFMP": 4781, "roughEstimateOfTTI": 16580, "optimisticTTI": 12057, "pessimisticTTI": 20281, "roughEstimateOfSI": 6787, "optimisticSI": 2373, "pessimisticSI": 8662, "roughEstimateOfLCP": 9060, "optimisticLCP": 8973, "pessimisticLCP": 9146, "roughEstimateOfTTFB": 654}, + {"url": "https://www.amazon.co.jp/", "roughEstimateOfFCP": 2940, "optimisticFCP": 2940, "pessimisticFCP": 2940, "roughEstimateOfFMP": 4042, "optimisticFMP": 2940, "pessimisticFMP": 5143, "roughEstimateOfTTI": 9518, "optimisticTTI": 6175, "pessimisticTTI": 12253, "roughEstimateOfSI": 3749, "optimisticSI": 1079, "pessimisticSI": 5594, "roughEstimateOfLCP": 5192, "optimisticLCP": 4670, "pessimisticLCP": 5714, "roughEstimateOfTTFB": 852}, + {"url": "https://www.att.com/", "roughEstimateOfFCP": 5457, "optimisticFCP": 5005, "pessimisticFCP": 5910, "roughEstimateOfFMP": 5698, "optimisticFMP": 5005, "pessimisticFMP": 6391, "roughEstimateOfTTI": 30690, "optimisticTTI": 27668, "pessimisticTTI": 33162, "roughEstimateOfSI": 6966, "optimisticSI": 1858, "pessimisticSI": 10912, "roughEstimateOfLCP": 13817, "optimisticLCP": 13737, "pessimisticLCP": 13897, "roughEstimateOfTTFB": 651}, + {"url": "https://www.bing.com/", "roughEstimateOfFCP": 962, "optimisticFCP": 962, "pessimisticFCP": 962, "roughEstimateOfFMP": 1339, "optimisticFMP": 962, "pessimisticFMP": 1717, "roughEstimateOfTTI": 2516, "optimisticTTI": 2241, "pessimisticTTI": 2741, "roughEstimateOfSI": 1368, "optimisticSI": 467, "pessimisticSI": 1788, "roughEstimateOfLCP": 1548, "optimisticLCP": 1262, "pessimisticLCP": 1834, "roughEstimateOfTTFB": 608}, + {"url": "https://www.blogger.com/about/", "roughEstimateOfFCP": 1533, "optimisticFCP": 1533, "pessimisticFCP": 1533, "roughEstimateOfFMP": 2106, "optimisticFMP": 1956, "pessimisticFMP": 2256, "roughEstimateOfTTI": 2254, "optimisticTTI": 2222, "pessimisticTTI": 2280, "roughEstimateOfSI": 6611, "optimisticSI": 4188, "pessimisticSI": 1870, "roughEstimateOfLCP": 2343, "optimisticLCP": 2280, "pessimisticLCP": 2406, "roughEstimateOfTTFB": 603}, + {"url": "https://www.cnet.com/", "roughEstimateOfFCP": 2578, "optimisticFCP": 2218, "pessimisticFCP": 2938, "roughEstimateOfFMP": 2814, "optimisticFMP": 2539, "pessimisticFMP": 3089, "roughEstimateOfTTI": 45329, "optimisticTTI": 40674, "pessimisticTTI": 49137, "roughEstimateOfSI": 11162, "optimisticSI": 1339, "pessimisticSI": 23218, "roughEstimateOfLCP": 4265, "optimisticLCP": 4185, "pessimisticLCP": 4346, "roughEstimateOfTTFB": 608}, + {"url": "https://www.codewars.com", "roughEstimateOfFCP": 2248, "optimisticFCP": 2248, "pessimisticFCP": 2248, "roughEstimateOfFMP": 3453, "optimisticFMP": 2422, "pessimisticFMP": 4483, "roughEstimateOfTTI": 9009, "optimisticTTI": 7042, "pessimisticTTI": 10618, "roughEstimateOfSI": 3082, "optimisticSI": 834, "pessimisticSI": 4787, "roughEstimateOfLCP": 9643, "optimisticLCP": 9318, "pessimisticLCP": 9968, "roughEstimateOfTTFB": 609}, + {"url": "https://www.dawn.com/", "roughEstimateOfFCP": 2588, "optimisticFCP": 2262, "pessimisticFCP": 2914, "roughEstimateOfFMP": 2832, "optimisticFMP": 2588, "pessimisticFMP": 3077, "roughEstimateOfTTI": 27334, "optimisticTTI": 23532, "pessimisticTTI": 30445, "roughEstimateOfSI": 8249, "optimisticSI": 1332, "pessimisticSI": 15960, "roughEstimateOfLCP": 3892, "optimisticLCP": 3240, "pessimisticLCP": 4543, "roughEstimateOfTTFB": 652}, + {"url": "https://www.deviantart.com/", "roughEstimateOfFCP": 2926, "optimisticFCP": 2926, "pessimisticFCP": 2926, "roughEstimateOfFMP": 2926, "optimisticFMP": 2926, "pessimisticFMP": 2926, "roughEstimateOfTTI": 13365, "optimisticTTI": 11182, "pessimisticTTI": 15152, "roughEstimateOfSI": 2926, "optimisticSI": 996, "pessimisticSI": 2992, "roughEstimateOfLCP": 11933, "optimisticLCP": 10408, "pessimisticLCP": 13457, "roughEstimateOfTTFB": 1009}, + {"url": "https://www.domaintools.com/", "roughEstimateOfFCP": 3236, "optimisticFCP": 3236, "pessimisticFCP": 3236, "roughEstimateOfFMP": 4793, "optimisticFMP": 3433, "pessimisticFMP": 6153, "roughEstimateOfTTI": 12539, "optimisticTTI": 10421, "pessimisticTTI": 14272, "roughEstimateOfSI": 6744, "optimisticSI": 3235, "pessimisticSI": 5540, "roughEstimateOfLCP": 9025, "optimisticLCP": 7556, "pessimisticLCP": 10494, "roughEstimateOfTTFB": 2351}, + {"url": "https://www.ebay.com/", "roughEstimateOfFCP": 2142, "optimisticFCP": 2142, "pessimisticFCP": 2142, "roughEstimateOfFMP": 2461, "optimisticFMP": 2461, "pessimisticFMP": 2461, "roughEstimateOfTTI": 16801, "optimisticTTI": 14670, "pessimisticTTI": 18545, "roughEstimateOfSI": 3150, "optimisticSI": 628, "pessimisticSI": 5677, "roughEstimateOfLCP": 2940, "optimisticLCP": 2461, "pessimisticLCP": 3419, "roughEstimateOfTTFB": 699}, + {"url": "https://www.ebs.in/IPS/", "roughEstimateOfFCP": 4297, "optimisticFCP": 4297, "pessimisticFCP": 4297, "roughEstimateOfFMP": 4724, "optimisticFMP": 4724, "pessimisticFMP": 4724, "roughEstimateOfTTI": 7748, "optimisticTTI": 7051, "pessimisticTTI": 8317, "roughEstimateOfSI": 7781, "optimisticSI": 4003, "pessimisticSI": 5441, "roughEstimateOfLCP": 6022, "optimisticLCP": 5960, "pessimisticLCP": 6083, "roughEstimateOfTTFB": 1223}, + {"url": "https://www.espn.com/", "roughEstimateOfFCP": 3910, "optimisticFCP": 3910, "pessimisticFCP": 3910, "roughEstimateOfFMP": 5320, "optimisticFMP": 3910, "pessimisticFMP": 6731, "roughEstimateOfTTI": 37312, "optimisticTTI": 34154, "pessimisticTTI": 39895, "roughEstimateOfSI": 9969, "optimisticSI": 2989, "pessimisticSI": 14461, "roughEstimateOfLCP": 7691, "optimisticLCP": 7371, "pessimisticLCP": 8011, "roughEstimateOfTTFB": 637}, + {"url": "https://www.flipkart.com", "roughEstimateOfFCP": 2367, "optimisticFCP": 2367, "pessimisticFCP": 2367, "roughEstimateOfFMP": 3948, "optimisticFMP": 2528, "pessimisticFMP": 5367, "roughEstimateOfTTI": 12145, "optimisticTTI": 10335, "pessimisticTTI": 13625, "roughEstimateOfSI": 6814, "optimisticSI": 3188, "pessimisticSI": 5876, "roughEstimateOfLCP": 11158, "optimisticLCP": 10673, "pessimisticLCP": 11643, "roughEstimateOfTTFB": 922}, + {"url": "https://www.foxnews.com/", "roughEstimateOfFCP": 3692, "optimisticFCP": 3692, "pessimisticFCP": 3692, "roughEstimateOfFMP": 3692, "optimisticFMP": 3692, "pessimisticFMP": 3692, "roughEstimateOfTTI": 25114, "optimisticTTI": 20659, "pessimisticTTI": 28759, "roughEstimateOfSI": 8833, "optimisticSI": 1187, "pessimisticSI": 17927, "roughEstimateOfLCP": 5682, "optimisticLCP": 5523, "pessimisticLCP": 5841, "roughEstimateOfTTFB": 634}, + {"url": "https://www.gmx.net/", "roughEstimateOfFCP": 2345, "optimisticFCP": 2345, "pessimisticFCP": 2345, "roughEstimateOfFMP": 2345, "optimisticFMP": 2345, "pessimisticFMP": 2345, "roughEstimateOfTTI": 10624, "optimisticTTI": 10107, "pessimisticTTI": 11046, "roughEstimateOfSI": 3620, "optimisticSI": 1327, "pessimisticSI": 4403, "roughEstimateOfLCP": 6954, "optimisticLCP": 6954, "pessimisticLCP": 6954, "roughEstimateOfTTFB": 611}, + {"url": "https://www.hatena.ne.jp/", "roughEstimateOfFCP": 1743, "optimisticFCP": 1743, "pessimisticFCP": 1743, "roughEstimateOfFMP": 2768, "optimisticFMP": 2265, "pessimisticFMP": 3272, "roughEstimateOfTTI": 16428, "optimisticTTI": 12460, "pessimisticTTI": 19675, "roughEstimateOfSI": 6985, "optimisticSI": 2323, "pessimisticSI": 9333, "roughEstimateOfLCP": 5865, "optimisticLCP": 4758, "pessimisticLCP": 6972, "roughEstimateOfTTFB": 877}, + {"url": "https://www.hulu.com/welcome", "roughEstimateOfFCP": 3938, "optimisticFCP": 3777, "pessimisticFCP": 4098, "roughEstimateOfFMP": 8045, "optimisticFMP": 7724, "pessimisticFMP": 8366, "roughEstimateOfTTI": 17382, "optimisticTTI": 15921, "pessimisticTTI": 18578, "roughEstimateOfSI": 4453, "optimisticSI": 920, "pessimisticSI": 7913, "roughEstimateOfLCP": 4098, "optimisticLCP": 4098, "pessimisticLCP": 4098, "roughEstimateOfTTFB": 612}, + {"url": "https://www.ifeng.com/", "roughEstimateOfFCP": 5148, "optimisticFCP": 5148, "pessimisticFCP": 5148, "roughEstimateOfFMP": 5148, "optimisticFMP": 5148, "pessimisticFMP": 5148, "roughEstimateOfTTI": 6205, "optimisticTTI": 5864, "pessimisticTTI": 6483, "roughEstimateOfSI": 6254, "optimisticSI": 2997, "pessimisticSI": 5148, "roughEstimateOfLCP": 5556, "optimisticLCP": 5556, "pessimisticLCP": 5556, "roughEstimateOfTTFB": 1653}, + {"url": "https://www.imageshack.us/login", "roughEstimateOfFCP": 2310, "optimisticFCP": 2310, "pessimisticFCP": 2310, "roughEstimateOfFMP": 2310, "optimisticFMP": 2310, "pessimisticFMP": 2310, "roughEstimateOfTTI": 7829, "optimisticTTI": 7670, "pessimisticTTI": 7959, "roughEstimateOfSI": 3858, "optimisticSI": 1491, "pessimisticSI": 4428, "roughEstimateOfLCP": 3466, "optimisticLCP": 3466, "pessimisticLCP": 3466, "roughEstimateOfTTFB": 603}, + {"url": "https://www.instagram.com/", "roughEstimateOfFCP": 1103, "optimisticFCP": 1103, "pessimisticFCP": 1103, "roughEstimateOfFMP": 3688, "optimisticFMP": 3688, "pessimisticFMP": 3688, "roughEstimateOfTTI": 5908, "optimisticTTI": 5216, "pessimisticTTI": 6475, "roughEstimateOfSI": 2381, "optimisticSI": 822, "pessimisticSI": 3077, "roughEstimateOfLCP": 5169, "optimisticLCP": 5089, "pessimisticLCP": 5248, "roughEstimateOfTTFB": 606}, + {"url": "https://www.irs.gov/", "roughEstimateOfFCP": 2022, "optimisticFCP": 2022, "pessimisticFCP": 2022, "roughEstimateOfFMP": 3229, "optimisticFMP": 2788, "pessimisticFMP": 3670, "roughEstimateOfTTI": 15894, "optimisticTTI": 14303, "pessimisticTTI": 17196, "roughEstimateOfSI": 3715, "optimisticSI": 818, "pessimisticSI": 6424, "roughEstimateOfLCP": 4458, "optimisticLCP": 3884, "pessimisticLCP": 5031, "roughEstimateOfTTFB": 684}, + {"url": "https://www.java.com/en/", "roughEstimateOfFCP": 961, "optimisticFCP": 961, "pessimisticFCP": 961, "roughEstimateOfFMP": 961, "optimisticFMP": 961, "pessimisticFMP": 961, "roughEstimateOfTTI": 3601, "optimisticTTI": 3102, "pessimisticTTI": 4010, "roughEstimateOfSI": 1157, "optimisticSI": 484, "pessimisticSI": 1199, "roughEstimateOfLCP": 3050, "optimisticLCP": 3050, "pessimisticLCP": 3050, "roughEstimateOfTTFB": 643}, + {"url": "https://www.linkedin.com/", "roughEstimateOfFCP": 1903, "optimisticFCP": 1903, "pessimisticFCP": 1903, "roughEstimateOfFMP": 1903, "optimisticFMP": 1903, "pessimisticFMP": 1903, "roughEstimateOfTTI": 11998, "optimisticTTI": 10161, "pessimisticTTI": 13500, "roughEstimateOfSI": 1903, "optimisticSI": 655, "pessimisticSI": 2227, "roughEstimateOfLCP": 2514, "optimisticLCP": 2476, "pessimisticLCP": 2551, "roughEstimateOfTTFB": 656}, + {"url": "https://www.metacafe.com/", "roughEstimateOfFCP": 1908, "optimisticFCP": 1908, "pessimisticFCP": 1908, "roughEstimateOfFMP": 1908, "optimisticFMP": 1908, "pessimisticFMP": 1908, "roughEstimateOfTTI": 6279, "optimisticTTI": 5841, "pessimisticTTI": 6637, "roughEstimateOfSI": 2676, "optimisticSI": 769, "pessimisticSI": 3998, "roughEstimateOfLCP": 4892, "optimisticLCP": 4892, "pessimisticLCP": 4892, "roughEstimateOfTTFB": 621}, + {"url": "https://www.mgid.com/ru", "roughEstimateOfFCP": 2063, "optimisticFCP": 2063, "pessimisticFCP": 2063, "roughEstimateOfFMP": 4696, "optimisticFMP": 4213, "pessimisticFMP": 5179, "roughEstimateOfTTI": 16910, "optimisticTTI": 15861, "pessimisticTTI": 17767, "roughEstimateOfSI": 5103, "optimisticSI": 983, "pessimisticSI": 9318, "roughEstimateOfLCP": 8564, "optimisticLCP": 8242, "pessimisticLCP": 8886, "roughEstimateOfTTFB": 648}, + {"url": "https://www.mlb.com/", "roughEstimateOfFCP": 3034, "optimisticFCP": 3034, "pessimisticFCP": 3034, "roughEstimateOfFMP": 3034, "optimisticFMP": 3034, "pessimisticFMP": 3034, "roughEstimateOfTTI": 39301, "optimisticTTI": 30243, "pessimisticTTI": 46712, "roughEstimateOfSI": 12494, "optimisticSI": 1316, "pessimisticSI": 26630, "roughEstimateOfLCP": 4649, "optimisticLCP": 4326, "pessimisticLCP": 4972, "roughEstimateOfTTFB": 604}, + {"url": "https://www.mozilla.org/en-US/", "roughEstimateOfFCP": 2359, "optimisticFCP": 2359, "pessimisticFCP": 2359, "roughEstimateOfFMP": 2359, "optimisticFMP": 2359, "pessimisticFMP": 2359, "roughEstimateOfTTI": 6012, "optimisticTTI": 5595, "pessimisticTTI": 6353, "roughEstimateOfSI": 2454, "optimisticSI": 801, "pessimisticSI": 3334, "roughEstimateOfLCP": 5913, "optimisticLCP": 5596, "pessimisticLCP": 6229, "roughEstimateOfTTFB": 607}, + {"url": "https://www.msn.com/", "roughEstimateOfFCP": 2174, "optimisticFCP": 2094, "pessimisticFCP": 2255, "roughEstimateOfFMP": 2521, "optimisticFMP": 2094, "pessimisticFMP": 2948, "roughEstimateOfTTI": 11623, "optimisticTTI": 10136, "pessimisticTTI": 12839, "roughEstimateOfSI": 4254, "optimisticSI": 1381, "pessimisticSI": 5803, "roughEstimateOfLCP": 3317, "optimisticLCP": 3204, "pessimisticLCP": 3430, "roughEstimateOfTTFB": 637}, + {"url": "https://www.netflix.com/", "roughEstimateOfFCP": 4341, "optimisticFCP": 4341, "pessimisticFCP": 4341, "roughEstimateOfFMP": 5453, "optimisticFMP": 5391, "pessimisticFMP": 5514, "roughEstimateOfTTI": 9224, "optimisticTTI": 6484, "pessimisticTTI": 11465, "roughEstimateOfSI": 4341, "optimisticSI": 871, "pessimisticSI": 5668, "roughEstimateOfLCP": 7699, "optimisticLCP": 6949, "pessimisticLCP": 8449, "roughEstimateOfTTFB": 609}, + {"url": "https://www.nih.gov/", "roughEstimateOfFCP": 4150, "optimisticFCP": 4150, "pessimisticFCP": 4150, "roughEstimateOfFMP": 4590, "optimisticFMP": 4397, "pessimisticFMP": 4784, "roughEstimateOfTTI": 6676, "optimisticTTI": 5680, "pessimisticTTI": 7491, "roughEstimateOfSI": 4150, "optimisticSI": 830, "pessimisticSI": 5685, "roughEstimateOfLCP": 6493, "optimisticLCP": 6028, "pessimisticLCP": 6958, "roughEstimateOfTTFB": 604}, + {"url": "https://www.ning.com/", "roughEstimateOfFCP": 2106, "optimisticFCP": 2106, "pessimisticFCP": 2106, "roughEstimateOfFMP": 3209, "optimisticFMP": 2497, "pessimisticFMP": 3921, "roughEstimateOfTTI": 17826, "optimisticTTI": 15079, "pessimisticTTI": 20073, "roughEstimateOfSI": 5445, "optimisticSI": 1385, "pessimisticSI": 8765, "roughEstimateOfLCP": 5814, "optimisticLCP": 4524, "pessimisticLCP": 7103, "roughEstimateOfTTFB": 601}, + {"url": "https://www.nokia.com/", "roughEstimateOfFCP": 2460, "optimisticFCP": 2460, "pessimisticFCP": 2460, "roughEstimateOfFMP": 2460, "optimisticFMP": 2460, "pessimisticFMP": 2460, "roughEstimateOfTTI": 12817, "optimisticTTI": 12240, "pessimisticTTI": 13288, "roughEstimateOfSI": 4297, "optimisticSI": 1367, "pessimisticSI": 5958, "roughEstimateOfLCP": 6452, "optimisticLCP": 6452, "pessimisticLCP": 6452, "roughEstimateOfTTFB": 614}, + {"url": "https://www.ocn.ne.jp/", "roughEstimateOfFCP": 3720, "optimisticFCP": 3720, "pessimisticFCP": 3720, "roughEstimateOfFMP": 3720, "optimisticFMP": 3720, "pessimisticFMP": 3720, "roughEstimateOfTTI": 11094, "optimisticTTI": 9846, "pessimisticTTI": 12116, "roughEstimateOfSI": 5168, "optimisticSI": 2266, "pessimisticSI": 4990, "roughEstimateOfLCP": 4726, "optimisticLCP": 4484, "pessimisticLCP": 4969, "roughEstimateOfTTFB": 1581}, + {"url": "https://www.onet.pl/", "roughEstimateOfFCP": 2078, "optimisticFCP": 2078, "pessimisticFCP": 2078, "roughEstimateOfFMP": 2078, "optimisticFMP": 2078, "pessimisticFMP": 2078, "roughEstimateOfTTI": 12271, "optimisticTTI": 11083, "pessimisticTTI": 13244, "roughEstimateOfSI": 4514, "optimisticSI": 1759, "pessimisticSI": 5129, "roughEstimateOfLCP": 3834, "optimisticLCP": 3834, "pessimisticLCP": 3834, "roughEstimateOfTTFB": 600}, + {"url": "https://www.orange.fr/portail", "roughEstimateOfFCP": 4085, "optimisticFCP": 3000, "pessimisticFCP": 5170, "roughEstimateOfFMP": 5055, "optimisticFMP": 3459, "pessimisticFMP": 6652, "roughEstimateOfTTI": 18968, "optimisticTTI": 17049, "pessimisticTTI": 20538, "roughEstimateOfSI": 8815, "optimisticSI": 3925, "pessimisticSI": 8301, "roughEstimateOfLCP": 7272, "optimisticLCP": 6679, "pessimisticLCP": 7866, "roughEstimateOfTTFB": 880}, + {"url": "https://www.partypoker.com/", "roughEstimateOfFCP": 4990, "optimisticFCP": 4990, "pessimisticFCP": 4990, "roughEstimateOfFMP": 4990, "optimisticFMP": 4990, "pessimisticFMP": 4990, "roughEstimateOfTTI": 7528, "optimisticTTI": 5396, "pessimisticTTI": 9272, "roughEstimateOfSI": 5769, "optimisticSI": 2695, "pessimisticSI": 4990, "roughEstimateOfLCP": 7171, "optimisticLCP": 5313, "pessimisticLCP": 9028, "roughEstimateOfTTFB": 1094}, + {"url": "https://www.rakuten.co.jp/", "roughEstimateOfFCP": 3165, "optimisticFCP": 3165, "pessimisticFCP": 3165, "roughEstimateOfFMP": 5641, "optimisticFMP": 3165, "pessimisticFMP": 8117, "roughEstimateOfTTI": 28112, "optimisticTTI": 20421, "pessimisticTTI": 34404, "roughEstimateOfSI": 10006, "optimisticSI": 4212, "pessimisticSI": 10273, "roughEstimateOfLCP": 8521, "optimisticLCP": 8121, "pessimisticLCP": 8921, "roughEstimateOfTTFB": 698}, + {"url": "https://www.reddit.com/", "roughEstimateOfFCP": 2296, "optimisticFCP": 2296, "pessimisticFCP": 2296, "roughEstimateOfFMP": 7649, "optimisticFMP": 5762, "pessimisticFMP": 9536, "roughEstimateOfTTI": 11941, "optimisticTTI": 11062, "pessimisticTTI": 12660, "roughEstimateOfSI": 7187, "optimisticSI": 3340, "pessimisticSI": 6277, "roughEstimateOfLCP": 10182, "optimisticLCP": 9048, "pessimisticLCP": 11315, "roughEstimateOfTTFB": 1017}, + {"url": "https://www.scribd.com/", "roughEstimateOfFCP": 2099, "optimisticFCP": 2099, "pessimisticFCP": 2099, "roughEstimateOfFMP": 2099, "optimisticFMP": 2099, "pessimisticFMP": 2099, "roughEstimateOfTTI": 10588, "optimisticTTI": 9860, "pessimisticTTI": 11183, "roughEstimateOfSI": 3254, "optimisticSI": 873, "pessimisticSI": 5079, "roughEstimateOfLCP": 8528, "optimisticLCP": 7621, "pessimisticLCP": 9435, "roughEstimateOfTTFB": 635}, + {"url": "https://www.shopping.com/", "roughEstimateOfFCP": 2801, "optimisticFCP": 2488, "pessimisticFCP": 3114, "roughEstimateOfFMP": 2801, "optimisticFMP": 2488, "pessimisticFMP": 3114, "roughEstimateOfTTI": 5626, "optimisticTTI": 5147, "pessimisticTTI": 6018, "roughEstimateOfSI": 3111, "optimisticSI": 1210, "pessimisticSI": 3543, "roughEstimateOfLCP": 4342, "optimisticLCP": 4342, "pessimisticLCP": 4342, "roughEstimateOfTTFB": 612}, + {"url": "https://www.skype.com/en/", "roughEstimateOfFCP": 2614, "optimisticFCP": 2614, "pessimisticFCP": 2614, "roughEstimateOfFMP": 2862, "optimisticFMP": 2614, "pessimisticFMP": 3109, "roughEstimateOfTTI": 6591, "optimisticTTI": 5957, "pessimisticTTI": 7110, "roughEstimateOfSI": 3199, "optimisticSI": 1120, "pessimisticSI": 4078, "roughEstimateOfLCP": 5043, "optimisticLCP": 5043, "pessimisticLCP": 5043, "roughEstimateOfTTFB": 716}, + {"url": "https://www.so-net.ne.jp/m/", "roughEstimateOfFCP": 4187, "optimisticFCP": 3225, "pessimisticFCP": 5150, "roughEstimateOfFMP": 4187, "optimisticFMP": 3225, "pessimisticFMP": 5150, "roughEstimateOfTTI": 9210, "optimisticTTI": 6872, "pessimisticTTI": 11123, "roughEstimateOfSI": 6563, "optimisticSI": 2439, "pessimisticSI": 7870, "roughEstimateOfLCP": 8523, "optimisticLCP": 7442, "pessimisticLCP": 9604, "roughEstimateOfTTFB": 612}, + {"url": "https://www.symantec.com/", "roughEstimateOfFCP": 3489, "optimisticFCP": 3303, "pessimisticFCP": 3675, "roughEstimateOfFMP": 3503, "optimisticFMP": 3303, "pessimisticFMP": 3703, "roughEstimateOfTTI": 12176, "optimisticTTI": 9215, "pessimisticTTI": 14599, "roughEstimateOfSI": 5628, "optimisticSI": 2165, "pessimisticSI": 6492, "roughEstimateOfLCP": 9914, "optimisticLCP": 8374, "pessimisticLCP": 11454, "roughEstimateOfTTFB": 666}, + {"url": "https://www.thestar.com.my/", "roughEstimateOfFCP": 3657, "optimisticFCP": 2259, "pessimisticFCP": 5056, "roughEstimateOfFMP": 3657, "optimisticFMP": 2259, "pessimisticFMP": 5056, "roughEstimateOfTTI": 23712, "optimisticTTI": 18899, "pessimisticTTI": 27650, "roughEstimateOfSI": 12420, "optimisticSI": 5315, "pessimisticSI": 12449, "roughEstimateOfLCP": 14197, "optimisticLCP": 12818, "pessimisticLCP": 15576, "roughEstimateOfTTFB": 979}, + {"url": "https://www.tianya.cn/m/", "roughEstimateOfFCP": 3505, "optimisticFCP": 3505, "pessimisticFCP": 3505, "roughEstimateOfFMP": 3577, "optimisticFMP": 3505, "pessimisticFMP": 3650, "roughEstimateOfTTI": 6030, "optimisticTTI": 5301, "pessimisticTTI": 6628, "roughEstimateOfSI": 13744, "optimisticSI": 8681, "pessimisticSI": 3978, "roughEstimateOfLCP": 7420, "optimisticLCP": 7050, "pessimisticLCP": 7790, "roughEstimateOfTTFB": 871}, + {"url": "https://www.torrentz.com/", "roughEstimateOfFCP": 817, "optimisticFCP": 817, "pessimisticFCP": 817, "roughEstimateOfFMP": 817, "optimisticFMP": 817, "pessimisticFMP": 817, "roughEstimateOfTTI": 817, "optimisticTTI": 817, "pessimisticTTI": 817, "roughEstimateOfSI": 909, "optimisticSI": 416, "pessimisticSI": 817, "roughEstimateOfLCP": 817, "optimisticLCP": 817, "pessimisticLCP": 817, "roughEstimateOfTTFB": 608}, + {"url": "https://www.tumblr.com/", "roughEstimateOfFCP": 2508, "optimisticFCP": 2508, "pessimisticFCP": 2508, "roughEstimateOfFMP": 2508, "optimisticFMP": 2508, "pessimisticFMP": 2508, "roughEstimateOfTTI": 9868, "optimisticTTI": 9611, "pessimisticTTI": 10079, "roughEstimateOfSI": 3125, "optimisticSI": 628, "pessimisticSI": 5615, "roughEstimateOfLCP": 8679, "optimisticLCP": 8679, "pessimisticLCP": 8679, "roughEstimateOfTTFB": 637}, {"url": "https://www.twitpic.com/", "roughEstimateOfFCP": 835, "optimisticFCP": 835, "pessimisticFCP": 835, "roughEstimateOfFMP": 835, "optimisticFMP": 835, "pessimisticFMP": 835, "roughEstimateOfTTI": 835, "optimisticTTI": 835, "pessimisticTTI": 835, "roughEstimateOfSI": 835, "optimisticSI": 121, "pessimisticSI": 876, "roughEstimateOfLCP": 835, "optimisticLCP": 835, "pessimisticLCP": 835, "roughEstimateOfTTFB": 601}, - {"url": "https://www.typepad.com/", "roughEstimateOfFCP": 2610, "optimisticFCP": 2610, "pessimisticFCP": 2610, "roughEstimateOfFMP": 3295, "optimisticFMP": 3092, "pessimisticFMP": 3498, "roughEstimateOfTTI": 3617, "optimisticTTI": 3659, "pessimisticTTI": 3575, "roughEstimateOfSI": 3146, "optimisticSI": 1009, "pessimisticSI": 3051, "roughEstimateOfLCP": 6037, "optimisticLCP": 6118, "pessimisticLCP": 5957, "roughEstimateOfTTFB": 789}, - {"url": "https://www.verizonwireless.com/", "roughEstimateOfFCP": 2977, "optimisticFCP": 2977, "pessimisticFCP": 2977, "roughEstimateOfFMP": 4054, "optimisticFMP": 4054, "pessimisticFMP": 4054, "roughEstimateOfTTI": 22674, "optimisticTTI": 21238, "pessimisticTTI": 24110, "roughEstimateOfSI": 5968, "optimisticSI": 870, "pessimisticSI": 7692, "roughEstimateOfLCP": 7119, "optimisticLCP": 7119, "pessimisticLCP": 7119, "roughEstimateOfTTFB": 640}, - {"url": "https://www.vevo.com/", "roughEstimateOfFCP": 5291, "optimisticFCP": 5291, "pessimisticFCP": 5291, "roughEstimateOfFMP": 6391, "optimisticFMP": 5619, "pessimisticFMP": 7163, "roughEstimateOfTTI": 20206, "optimisticTTI": 18496, "pessimisticTTI": 21916, "roughEstimateOfSI": 13794, "optimisticSI": 6002, "pessimisticSI": 8679, "roughEstimateOfLCP": 8810, "optimisticLCP": 7814, "pessimisticLCP": 9807, "roughEstimateOfTTFB": 772}, - {"url": "https://www.wikipedia.org/", "roughEstimateOfFCP": 1458, "optimisticFCP": 1458, "pessimisticFCP": 1458, "roughEstimateOfFMP": 1472, "optimisticFMP": 1458, "pessimisticFMP": 1487, "roughEstimateOfTTI": 1731, "optimisticTTI": 1593, "pessimisticTTI": 1870, "roughEstimateOfSI": 1610, "optimisticSI": 579, "pessimisticSI": 1614, "roughEstimateOfLCP": 1472, "optimisticLCP": 1458, "pessimisticLCP": 1487, "roughEstimateOfTTFB": 603}, - {"url": "https://www8.hp.com/us/en/home.html", "roughEstimateOfFCP": 4720, "optimisticFCP": 3373, "pessimisticFCP": 6068, "roughEstimateOfFMP": 6679, "optimisticFMP": 4995, "pessimisticFMP": 8364, "roughEstimateOfTTI": 22072, "optimisticTTI": 18600, "pessimisticTTI": 25543, "roughEstimateOfSI": 13346, "optimisticSI": 3856, "pessimisticSI": 12611, "roughEstimateOfLCP": 10807, "optimisticLCP": 10807, "pessimisticLCP": 10807, "roughEstimateOfTTFB": 612} + {"url": "https://www.typepad.com/", "roughEstimateOfFCP": 2610, "optimisticFCP": 2610, "pessimisticFCP": 2610, "roughEstimateOfFMP": 3295, "optimisticFMP": 3092, "pessimisticFMP": 3498, "roughEstimateOfTTI": 3613, "optimisticTTI": 3659, "pessimisticTTI": 3575, "roughEstimateOfSI": 2633, "optimisticSI": 1009, "pessimisticSI": 3051, "roughEstimateOfLCP": 6037, "optimisticLCP": 6118, "pessimisticLCP": 5957, "roughEstimateOfTTFB": 789}, + {"url": "https://www.verizonwireless.com/", "roughEstimateOfFCP": 2977, "optimisticFCP": 2977, "pessimisticFCP": 2977, "roughEstimateOfFMP": 4054, "optimisticFMP": 4054, "pessimisticFMP": 4054, "roughEstimateOfTTI": 22912, "optimisticTTI": 21340, "pessimisticTTI": 24198, "roughEstimateOfSI": 4375, "optimisticSI": 870, "pessimisticSI": 7892, "roughEstimateOfLCP": 7119, "optimisticLCP": 7119, "pessimisticLCP": 7119, "roughEstimateOfTTFB": 640}, + {"url": "https://www.vevo.com/", "roughEstimateOfFCP": 5291, "optimisticFCP": 5291, "pessimisticFCP": 5291, "roughEstimateOfFMP": 6391, "optimisticFMP": 5619, "pessimisticFMP": 7163, "roughEstimateOfTTI": 23350, "optimisticTTI": 18496, "pessimisticTTI": 27321, "roughEstimateOfSI": 12286, "optimisticSI": 6002, "pessimisticSI": 9707, "roughEstimateOfLCP": 8306, "optimisticLCP": 7814, "pessimisticLCP": 8798, "roughEstimateOfTTFB": 772}, + {"url": "https://www.wikipedia.org/", "roughEstimateOfFCP": 1458, "optimisticFCP": 1458, "pessimisticFCP": 1458, "roughEstimateOfFMP": 1472, "optimisticFMP": 1458, "pessimisticFMP": 1487, "roughEstimateOfTTI": 1745, "optimisticTTI": 1593, "pessimisticTTI": 1870, "roughEstimateOfSI": 1458, "optimisticSI": 579, "pessimisticSI": 1614, "roughEstimateOfLCP": 1472, "optimisticLCP": 1458, "pessimisticLCP": 1487, "roughEstimateOfTTFB": 603}, + {"url": "https://www8.hp.com/us/en/home.html", "roughEstimateOfFCP": 4720, "optimisticFCP": 3373, "pessimisticFCP": 6068, "roughEstimateOfFMP": 6679, "optimisticFMP": 4995, "pessimisticFMP": 8364, "roughEstimateOfTTI": 23148, "optimisticTTI": 18600, "pessimisticTTI": 26870, "roughEstimateOfSI": 10569, "optimisticSI": 3856, "pessimisticSI": 12924, "roughEstimateOfLCP": 10807, "optimisticLCP": 10807, "pessimisticLCP": 10807, "roughEstimateOfTTFB": 612} ] } diff --git a/core/test/fixtures/user-flows/reports/sample-flow-result.json b/core/test/fixtures/user-flows/reports/sample-flow-result.json index e2dd0c8a674a..18e9c4a19fb6 100644 --- a/core/test/fixtures/user-flows/reports/sample-flow-result.json +++ b/core/test/fixtures/user-flows/reports/sample-flow-result.json @@ -275,7 +275,7 @@ "description": "Time to Interactive is the amount of time it takes for the page to become fully interactive. [Learn more about the Time to Interactive metric](https://developer.chrome.com/docs/lighthouse/performance/interactive/).", "score": 0.99, "scoreDisplayMode": "numeric", - "numericValue": 2369.0733999999998, + "numericValue": 2369.0734, "numericUnit": "millisecond", "displayValue": "2.4 s" }, @@ -6848,7 +6848,7 @@ }, { "values": { - "timeInMs": 2369.0733999999998 + "timeInMs": 2369.0734 }, "path": "audits.interactive.displayValue" }, @@ -17539,7 +17539,7 @@ "description": "Time to Interactive is the amount of time it takes for the page to become fully interactive. [Learn more about the Time to Interactive metric](https://developer.chrome.com/docs/lighthouse/performance/interactive/).", "score": 1, "scoreDisplayMode": "numeric", - "numericValue": 925.2026, + "numericValue": 931.0526, "numericUnit": "millisecond", "displayValue": "0.9 s" }, @@ -18490,7 +18490,7 @@ "description": "Collects all available metrics.", "score": 1, "scoreDisplayMode": "informative", - "numericValue": 925, + "numericValue": 931, "numericUnit": "millisecond", "details": { "type": "debugdata", @@ -18499,7 +18499,7 @@ "firstContentfulPaint": 867, "firstMeaningfulPaint": 867, "largestContentfulPaint": 1803, - "interactive": 925, + "interactive": 931, "speedIndex": 867, "totalBlockingTime": 13, "maxPotentialFID": 76, @@ -24119,7 +24119,7 @@ }, { "values": { - "timeInMs": 925.2026 + "timeInMs": 931.0526 }, "path": "audits.interactive.displayValue" }, diff --git a/core/test/lib/lantern/metrics/__snapshots__/interactive-test.js.snap b/core/test/lib/lantern/metrics/__snapshots__/interactive-test.js.snap index bae1c7dd70a2..df52e4cb0546 100644 --- a/core/test/lib/lantern/metrics/__snapshots__/interactive-test.js.snap +++ b/core/test/lib/lantern/metrics/__snapshots__/interactive-test.js.snap @@ -3,8 +3,8 @@ exports[`Metrics: Lantern TTI should compute predicted value 1`] = ` Object { "optimistic": 4178, - "pessimistic": 4234, - "timing": 4206, + "pessimistic": 3773, + "timing": 3955, } `; @@ -12,6 +12,6 @@ exports[`Metrics: Lantern TTI should compute predicted value on iframes with sub Object { "optimistic": 6207, "pessimistic": 6242, - "timing": 6224, + "timing": 6226, } `; diff --git a/core/test/lib/lantern/metrics/speed-index-test.js b/core/test/lib/lantern/metrics/speed-index-test.js index 7c06c380a828..6f449cccbfdd 100644 --- a/core/test/lib/lantern/metrics/speed-index-test.js +++ b/core/test/lib/lantern/metrics/speed-index-test.js @@ -34,7 +34,7 @@ describe('Metrics: Lantern Speed Index', () => { Object { "optimistic": 605, "pessimistic": 1661, - "timing": 1676, + "timing": 1511, } `); }); @@ -56,7 +56,7 @@ toMatchInlineSnapshot(` Object { "optimistic": 605, "pessimistic": 2440, - "timing": 3008, + "timing": 2198, } `); }); @@ -68,16 +68,16 @@ Object { it('should scale coefficients back', async () => { const result = LanternSpeedIndex.getScaledCoefficients(5); - expect(result).toEqual({intercept: -0, pessimistic: 0.5, optimistic: 0.5}); + expect(result).toEqual({intercept: 0, pessimistic: 0.5, optimistic: 0.5}); }); it('should scale coefficients forward', async () => { const result = LanternSpeedIndex.getScaledCoefficients(300); expect(result).toMatchInlineSnapshot(` Object { - "intercept": -562.5, + "intercept": 0, "optimistic": 2.525, - "pessimistic": 0.8375, + "pessimistic": 0.275, } `); }); diff --git a/core/test/lib/lantern/simulator/connection-pool-test.js b/core/test/lib/lantern/simulator/connection-pool-test.js index 19df4fa1978f..27f4de888542 100644 --- a/core/test/lib/lantern/simulator/connection-pool-test.js +++ b/core/test/lib/lantern/simulator/connection-pool-test.js @@ -121,7 +121,7 @@ describe('DependencyGraph/Simulator/ConnectionPool', () => { assert.ok(connections[6], 'did not find connection for 7th record'); }); - it('should respect observed connection reuse', () => { + it('should be oblivious to connection reuse', () => { const coldRecord = record(); const warmRecord = record(); const pool = new ConnectionPool([coldRecord, warmRecord], @@ -129,45 +129,15 @@ describe('DependencyGraph/Simulator/ConnectionPool', () => { pool._connectionReusedByRequestId.set(warmRecord.requestId, true); assert.ok(pool.acquire(coldRecord), 'should have acquired connection'); - assert.ok(!pool.acquire(warmRecord), 'should not have acquired connection'); - pool.release(coldRecord); - - const connections = Array.from(pool._connectionsByOrigin.get('http://example.com')); - connections.forEach((connection, i) => { - connection.setWarmed(i % 2 === 0); - }); - - assert.equal(pool.acquire(coldRecord), connections[1], 'should have cold connection'); - assert.equal(pool.acquire(warmRecord), connections[0], 'should have warm connection'); - pool.release(coldRecord); - pool.release(warmRecord); - - connections.forEach(connection => { - connection.setWarmed(true); - }); - - assert.ok(!pool.acquire(coldRecord), 'should not have acquired connection'); assert.ok(pool.acquire(warmRecord), 'should have acquired connection'); - }); - - it('should ignore observed connection reuse when flag is present', () => { - const coldRecord = record(); - const warmRecord = record(); - const pool = new ConnectionPool([coldRecord, warmRecord], - simulationOptions({rtt, throughput})); - pool._connectionReusedByRequestId.set(warmRecord.requestId, true); - - const opts = {ignoreConnectionReused: true}; - assert.ok(pool.acquire(coldRecord, opts), 'should have acquired connection'); - assert.ok(pool.acquire(warmRecord, opts), 'should have acquired connection'); pool.release(coldRecord); for (const connection of pool._connectionsByOrigin.get('http://example.com')) { connection.setWarmed(true); } - assert.ok(pool.acquire(coldRecord, opts), 'should have acquired connection'); - assert.ok(pool.acquireActiveConnectionFromRecord(warmRecord, opts), + assert.ok(pool.acquire(coldRecord), 'should have acquired connection'); + assert.ok(pool.acquireActiveConnectionFromRecord(warmRecord), 'should have acquired connection'); }); diff --git a/core/test/lib/lantern/simulator/simulator-test.js b/core/test/lib/lantern/simulator/simulator-test.js index 7d8b11135255..55aa90ef5ebe 100644 --- a/core/test/lib/lantern/simulator/simulator-test.js +++ b/core/test/lib/lantern/simulator/simulator-test.js @@ -108,12 +108,12 @@ describe('DependencyGraph/Simulator', () => { const simulator = new Simulator({serverResponseTimeByOrigin}); const result = simulator.simulate(nodeA); - // should be 950ms for A, 800ms each for B, C, D - assert.equal(result.timeInMs, 3350); + // should be 950ms for A, 650ms each for B, C, D (no DNS and one-way connection) + assert.equal(result.timeInMs, 2900); assertNodeTiming(result, nodeA, {startTime: 0, endTime: 950}); - assertNodeTiming(result, nodeB, {startTime: 950, endTime: 1750}); - assertNodeTiming(result, nodeC, {startTime: 1750, endTime: 2550}); - assertNodeTiming(result, nodeD, {startTime: 2550, endTime: 3350}); + assertNodeTiming(result, nodeB, {startTime: 950, endTime: 1600}); + assertNodeTiming(result, nodeC, {startTime: 1600, endTime: 2250}); + assertNodeTiming(result, nodeD, {startTime: 2250, endTime: 2900}); }); it('should simulate cached network graphs', () => { @@ -183,17 +183,17 @@ describe('DependencyGraph/Simulator', () => { nodeA.addDependent(nodeB); nodeB.addDependent(nodeC); - nodeB.addDependent(nodeE); // finishes 200 ms after C + nodeB.addDependent(nodeE); // finishes 350 ms after C nodeC.addDependent(nodeD); - nodeC.addDependent(nodeF); // finishes 400 ms after D + nodeC.addDependent(nodeF); // finishes 700 ms after D const simulator = new Simulator({ serverResponseTimeByOrigin, cpuSlowdownMultiplier: 5, }); const result = simulator.simulate(nodeA); - // should be 950ms for A, 800ms each for B, C, D, with F finishing 400 ms after D - assert.equal(result.timeInMs, 3750); + // should be 950ms for A, 650ms each for B, C, D, with F finishing 700 ms after D + assert.equal(result.timeInMs, 3600); }); it('should simulate basic parallel requests', () => { @@ -212,7 +212,7 @@ describe('DependencyGraph/Simulator', () => { assert.equal(result.timeInMs, 950 + 950); }); - it('should not reuse connections', () => { + it('should make connections in parallel', () => { const nodeA = new NetworkNode(request({startTime: 0, networkRequestTime: 0, endTime: 1})); const nodeB = new NetworkNode(request({startTime: 2, networkRequestTime: 2, endTime: 3})); const nodeC = new NetworkNode(request({startTime: 2, networkRequestTime: 2, endTime: 5})); @@ -224,8 +224,12 @@ describe('DependencyGraph/Simulator', () => { const simulator = new Simulator({serverResponseTimeByOrigin}); const result = simulator.simulate(nodeA); - // should be 950ms for A and 650ms for the next 3 - assert.equal(result.timeInMs, 950 + 650 * 3); + // should be 950ms for A, 650ms for B reusing connection, 800ms for C and D in parallel. + assert.equal(result.timeInMs, 950 + 800); + assertNodeTiming(result, nodeA, {startTime: 0, endTime: 950}); + assertNodeTiming(result, nodeB, {startTime: 950, endTime: 1600}); + assertNodeTiming(result, nodeC, {startTime: 950, endTime: 1750}); + assertNodeTiming(result, nodeD, {startTime: 950, endTime: 1750}); }); it('should adjust throughput based on number of requests', () => { @@ -272,13 +276,13 @@ describe('DependencyGraph/Simulator', () => { const result = simulator.simulate(rootNode); // should be 3 RTs + SRT for rootNode (950ms) - // should be 2 RTs + SRT for image nodes in observed order (800ms) + // should be 1 RT + SRT for image nodes in observed order (650ms) assertNodeTiming(result, rootNode, {startTime: 0, endTime: 950}); - assertNodeTiming(result, imageNodes[4], {startTime: 950, endTime: 1750}); - assertNodeTiming(result, imageNodes[3], {startTime: 1750, endTime: 2550}); - assertNodeTiming(result, imageNodes[2], {startTime: 2550, endTime: 3350}); - assertNodeTiming(result, imageNodes[1], {startTime: 3350, endTime: 4150}); - assertNodeTiming(result, imageNodes[0], {startTime: 4150, endTime: 4950}); + assertNodeTiming(result, imageNodes[4], {startTime: 950, endTime: 1600}); + assertNodeTiming(result, imageNodes[3], {startTime: 1600, endTime: 2250}); + assertNodeTiming(result, imageNodes[2], {startTime: 2250, endTime: 2900}); + assertNodeTiming(result, imageNodes[1], {startTime: 2900, endTime: 3550}); + assertNodeTiming(result, imageNodes[0], {startTime: 3550, endTime: 4200}); }); it('should start network requests in priority order to break startTime ties', () => { @@ -302,13 +306,13 @@ describe('DependencyGraph/Simulator', () => { const result = simulator.simulate(rootNode); // should be 3 RTs + SRT for rootNode (950ms) - // should be 2 RTs + SRT for image nodes in priority order (800ms) + // should be 1 RT + SRT for image nodes in priority order (650ms) assertNodeTiming(result, rootNode, {startTime: 0, endTime: 950}); - assertNodeTiming(result, imageNodes[4], {startTime: 950, endTime: 1750}); - assertNodeTiming(result, imageNodes[3], {startTime: 1750, endTime: 2550}); - assertNodeTiming(result, imageNodes[2], {startTime: 2550, endTime: 3350}); - assertNodeTiming(result, imageNodes[1], {startTime: 3350, endTime: 4150}); - assertNodeTiming(result, imageNodes[0], {startTime: 4150, endTime: 4950}); + assertNodeTiming(result, imageNodes[4], {startTime: 950, endTime: 1600}); + assertNodeTiming(result, imageNodes[3], {startTime: 1600, endTime: 2250}); + assertNodeTiming(result, imageNodes[2], {startTime: 2250, endTime: 2900}); + assertNodeTiming(result, imageNodes[1], {startTime: 2900, endTime: 3550}); + assertNodeTiming(result, imageNodes[0], {startTime: 3550, endTime: 4200}); }); it('should simulate two graphs in a row', () => { @@ -360,9 +364,9 @@ describe('DependencyGraph/Simulator', () => { // - The second with C & D in series. // Under HTTP/2 simulation these should be equivalent, but definitely parallel // shouldn't be slower. - const resultA = simulator.simulate(nodeA, {flexibleOrdering: true}); + const resultA = simulator.simulate(nodeA); nodeC.addDependent(nodeD); - const resultB = simulator.simulate(nodeA, {flexibleOrdering: true}); + const resultB = simulator.simulate(nodeA); expect(resultA.timeInMs).toBeLessThanOrEqual(resultB.timeInMs); }); diff --git a/core/test/results/sample_v2.json b/core/test/results/sample_v2.json index 2e182bc18884..346dc315417f 100644 --- a/core/test/results/sample_v2.json +++ b/core/test/results/sample_v2.json @@ -4288,13 +4288,13 @@ "description": "Minifying JavaScript files can reduce payload sizes and script parse time. [Learn how to minify JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unminified-javascript/).", "score": 0, "scoreDisplayMode": "metricSavings", - "numericValue": 630, + "numericValue": 480, "numericUnit": "millisecond", "displayValue": "Potential savings of 81 KiB", "warnings": [], "metricSavings": { "FCP": 0, - "LCP": 650 + "LCP": 500 }, "details": { "type": "opportunity", @@ -4323,7 +4323,7 @@ "wastedPercent": 50.176166426166425 } ], - "overallSavingsMs": 630, + "overallSavingsMs": 480, "overallSavingsBytes": 83453, "sortedBy": [ "wastedBytes" @@ -4332,7 +4332,7 @@ "type": "debugdata", "metricSavings": { "FCP": 0, - "LCP": 630 + "LCP": 480 } } }, @@ -4447,13 +4447,13 @@ "description": "Image formats like WebP and AVIF often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more about modern image formats](https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/).", "score": 0, "scoreDisplayMode": "metricSavings", - "numericValue": 330, + "numericValue": 300, "numericUnit": "millisecond", "displayValue": "Potential savings of 76 KiB", "warnings": [], "metricSavings": { "FCP": 0, - "LCP": 350 + "LCP": 300 }, "details": { "type": "opportunity", @@ -4545,7 +4545,7 @@ "wastedWebpBytes": 9002 } ], - "overallSavingsMs": 330, + "overallSavingsMs": 300, "overallSavingsBytes": 77874.3, "sortedBy": [ "wastedBytes" @@ -4554,7 +4554,7 @@ "type": "debugdata", "metricSavings": { "FCP": 0, - "LCP": 330 + "LCP": 300 } } }, @@ -4776,12 +4776,12 @@ "description": "Polyfills and transforms enable legacy browsers to use new JavaScript features. However, many aren't necessary for modern browsers. For your bundled JavaScript, adopt a modern script deployment strategy using module/nomodule feature detection to reduce the amount of code shipped to modern browsers, while retaining support for legacy browsers. [Learn how to use modern JavaScript](https://web.dev/articles/publish-modern-javascript)", "score": 0, "scoreDisplayMode": "metricSavings", - "numericValue": 300, + "numericValue": 180, "numericUnit": "millisecond", "displayValue": "Potential savings of 26 KiB", "metricSavings": { "FCP": 0, - "LCP": 300 + "LCP": 200 }, "details": { "type": "opportunity", @@ -4841,7 +4841,7 @@ "totalBytes": 0 } ], - "overallSavingsMs": 300, + "overallSavingsMs": 180, "overallSavingsBytes": 26585, "sortedBy": [ "wastedBytes" @@ -4850,7 +4850,7 @@ "type": "debugdata", "metricSavings": { "FCP": 0, - "LCP": 300 + "LCP": 180 } } },