From f1bf96d44ea506fcea3a6e7b5956ccbac990e241 Mon Sep 17 00:00:00 2001 From: Patrick Hulce Date: Sat, 30 Jun 2018 15:25:57 -0700 Subject: [PATCH 1/4] core(simulator): add DNS information --- .../dependency-graph/simulator/dns-cache.js | 79 +++++++++++++++++++ .../dependency-graph/simulator/simulator.js | 18 +++-- .../simulator/tcp-connection.js | 6 +- 3 files changed, 97 insertions(+), 6 deletions(-) create mode 100644 lighthouse-core/lib/dependency-graph/simulator/dns-cache.js diff --git a/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js b/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js new file mode 100644 index 000000000000..ffd6f304cb22 --- /dev/null +++ b/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js @@ -0,0 +1,79 @@ +/** + * @license Copyright 2018 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + */ +'use strict'; + +const DNS_RESOLUTION_RTT_MULTIPLIER = 1.5; + +module.exports = class DNSCache { + /** + * @param {{rtt: number}} options + */ + constructor(options) { + this._options = Object.assign( + { + rtt: undefined, + }, + options + ); + + if (!this._options.rtt) { + throw new Error('Cannot create DNS cache with no rtt'); + } + + this._rtt = this._options.rtt; + /** @type {Map} */ + this._resolvedDomainNames = new Map(); + } + + /** + * @param {LH.Artifacts.NetworkRequest} request + * @param {number=} requestedAt + * @return {number} + */ + getTimeUntilResolution(request, requestedAt) { + const shouldUpdateCache = typeof requestedAt === 'undefined'; + requestedAt = requestedAt || 0; + + const domain = request.parsedURL.host; + const cacheEntry = this._resolvedDomainNames.get(domain); + let timeUntilResolved = this._rtt * DNS_RESOLUTION_RTT_MULTIPLIER; + if (cacheEntry) { + const timeUntilCachedIsResolved = Math.max(cacheEntry.resolvedAt - requestedAt, 0); + timeUntilResolved = Math.min(timeUntilCachedIsResolved, timeUntilResolved); + } + + const resolvedAt = requestedAt + timeUntilResolved; + if (shouldUpdateCache) this._updateCacheResolvedAtIfNeeded(request, resolvedAt); + + return timeUntilResolved; + } + + /** + * @param {LH.Artifacts.NetworkRequest} request + * @param {number} resolvedAt + */ + _updateCacheResolvedAtIfNeeded(request, resolvedAt) { + const domain = request.parsedURL.host; + const cacheEntry = this._resolvedDomainNames.get(domain) || {resolvedAt}; + cacheEntry.resolvedAt = Math.min(cacheEntry.resolvedAt, resolvedAt); + this._resolvedDomainNames.set(domain, cacheEntry); + } + + /** + * Forcefully sets the DNS resolution time for a record. + * Useful for testing and alternate execution simulations. + * + * @param {string} domain + * @param {number} resolvedAt + */ + setResolvedAt(domain, resolvedAt) { + this._resolvedDomainNames.set(domain, {resolvedAt}); + } + + static get RTT_MULTIPLIER() { + return DNS_RESOLUTION_RTT_MULTIPLIER; + } +}; diff --git a/lighthouse-core/lib/dependency-graph/simulator/simulator.js b/lighthouse-core/lib/dependency-graph/simulator/simulator.js index d020693ff35c..a2757aaf7192 100644 --- a/lighthouse-core/lib/dependency-graph/simulator/simulator.js +++ b/lighthouse-core/lib/dependency-graph/simulator/simulator.js @@ -8,6 +8,7 @@ const BaseNode = require('../base-node'); const TcpConnection = require('./tcp-connection'); const ConnectionPool = require('./connection-pool'); +const DNSCache = require('./dns-cache'); const mobile3G = require('../../../config/constants').throttling.mobile3G; /** @typedef {BaseNode.Node} Node */ @@ -66,6 +67,7 @@ class Simulator { /** @type {Map} */ this._numberInProgressByType = new Map(); this._nodes = {}; + this._dns = new DNSCache({rtt: this._rtt}); // @ts-ignore this._connectionPool = /** @type {ConnectionPool} */ (null); } @@ -260,20 +262,23 @@ class Simulator { * @return {number} */ _estimateNetworkTimeRemaining(networkNode) { + const record = networkNode.record; const timingData = this._getTimingData(networkNode); let timeElapsed = 0; if (networkNode.fromDiskCache) { - // Rough access time for seeking to location on disk and reading sequentially + // Rough access time for seeking to location on disk and reading sequentially = 8ms + 20ms/MB // @see http://norvig.com/21-days.html#answers - const sizeInMb = (networkNode.record.resourceSize || 0) / 1024 / 1024; + const sizeInMb = (record.resourceSize || 0) / 1024 / 1024; timeElapsed = 8 + 20 * sizeInMb - timingData.timeElapsed; } else { // If we're estimating time remaining, we already acquired a connection for this record, definitely non-null - const connection = /** @type {TcpConnection} */ (this._acquireConnection(networkNode.record)); + const connection = /** @type {TcpConnection} */ (this._acquireConnection(record)); + const dnsResolutionTime = this._dns.getTimeUntilResolution(record, timingData.startTime); + const timeAlreadyElapsed = timingData.timeElapsed; const calculation = connection.simulateDownloadUntil( - networkNode.record.transferSize - timingData.bytesDownloaded, - {timeAlreadyElapsed: timingData.timeElapsed, maximumTimeToElapse: Infinity} + record.transferSize - timingData.bytesDownloaded, + {timeAlreadyElapsed, dnsResolutionTime, maximumTimeToElapse: Infinity} ); timeElapsed = calculation.timeElapsed; @@ -318,9 +323,11 @@ class Simulator { const record = node.record; // If we're updating the progress, we already acquired a connection for this record, definitely non-null const connection = /** @type {TcpConnection} */ (this._acquireConnection(record)); + const dnsResolutionTime = this._dns.getTimeUntilResolution(record, timingData.startTime); const calculation = connection.simulateDownloadUntil( record.transferSize - timingData.bytesDownloaded, { + dnsResolutionTime, timeAlreadyElapsed: timingData.timeElapsed, maximumTimeToElapse: timePeriodLength - timingData.timeElapsedOvershoot, } @@ -386,6 +393,7 @@ class Simulator { // initialize the necessary data containers this._flexibleOrdering = !!options.flexibleOrdering; + this._dns = new DNSCache({rtt: this._rtt}); this._initializeConnectionPool(graph); this._initializeAuxiliaryData(); diff --git a/lighthouse-core/lib/dependency-graph/simulator/tcp-connection.js b/lighthouse-core/lib/dependency-graph/simulator/tcp-connection.js index 56c41c0c2297..2ec8ca4d7cfa 100644 --- a/lighthouse-core/lib/dependency-graph/simulator/tcp-connection.js +++ b/lighthouse-core/lib/dependency-graph/simulator/tcp-connection.js @@ -121,7 +121,8 @@ class TcpConnection { * @return {DownloadResults} */ simulateDownloadUntil(bytesToDownload, options) { - const {timeAlreadyElapsed = 0, maximumTimeToElapse = Infinity} = options || {}; + const {timeAlreadyElapsed = 0, maximumTimeToElapse = Infinity, dnsResolutionTime = 0} = + options || {}; if (this._warmed && this._h2) { bytesToDownload -= this._h2OverflowBytesDownloaded; @@ -133,6 +134,8 @@ class TcpConnection { let handshakeAndRequest = oneWayLatency; if (!this._warmed) { handshakeAndRequest = + // DNS lookup + dnsResolutionTime + // SYN oneWayLatency + // SYN ACK @@ -188,6 +191,7 @@ module.exports = TcpConnection; /** * @typedef DownloadOptions + * @property {number} [dnsResolutionTime] * @property {number} [timeAlreadyElapsed] * @property {number} [maximumTimeToElapse] */ From c991b4a803405a478fabded6684ae925d88862f4 Mon Sep 17 00:00:00 2001 From: Patrick Hulce Date: Fri, 6 Jul 2018 15:57:02 -0400 Subject: [PATCH 2/4] update tests --- .../dependency-graph/simulator/dns-cache.js | 12 +-- .../dependency-graph/simulator/simulator.js | 10 ++- .../load-fast-enough-for-pwa-test.js.snap | 3 + .../audits/__snapshots__/metrics-test.js.snap | 38 ++++++++++ .../predictive-perf-test.js.snap | 24 ++++++ .../byte-efficiency-audit-test.js.snap | 12 +++ .../byte-efficiency-audit-test.js | 12 +-- .../render-blocking-resources-test.js | 2 +- .../audits/load-fast-enough-for-pwa-test.js | 3 +- lighthouse-core/test/audits/metrics-test.js | 37 +--------- .../first-meaningful-paint-test.js.snap | 12 +++ .../metrics/first-meaningful-paint-test.js | 8 +- .../test/audits/predictive-perf-test.js | 18 ++--- .../estimated-input-latency-test.js.snap | 9 +++ .../first-contentful-paint-test.js.snap | 9 +++ .../__snapshots__/first-cpu-idle-test.js.snap | 9 +++ .../first-meaningful-paint-test.js.snap | 9 +++ .../__snapshots__/interactive-test.js.snap | 9 +++ ...ntern-estimated-input-latency-test.js.snap | 9 +++ ...antern-first-contentful-paint-test.js.snap | 9 +++ .../lantern-first-cpu-idle-test.js.snap | 9 +++ ...antern-first-meaningful-paint-test.js.snap | 9 +++ .../lantern-interactive-test.js.snap | 9 +++ .../lantern-speed-index-test.js.snap | 9 +++ .../__snapshots__/speed-index-test.js.snap | 9 +++ .../metrics/estimated-input-latency-test.js | 8 +- .../metrics/first-contentful-paint-test.js | 8 +- .../computed/metrics/first-cpu-idle-test.js | 8 +- .../metrics/first-meaningful-paint-test.js | 8 +- .../computed/metrics/interactive-test.js | 8 +- .../lantern-estimated-input-latency-test.js | 9 ++- .../lantern-first-contentful-paint-test.js | 8 +- .../metrics/lantern-first-cpu-idle-test.js | 8 +- .../lantern-first-meaningful-paint-test.js | 8 +- .../metrics/lantern-interactive-test.js | 8 +- .../metrics/lantern-speed-index-test.js | 9 ++- .../computed/metrics/speed-index-test.js | 8 +- .../simulator/simulator-test.js | 73 ++++++++++--------- 38 files changed, 333 insertions(+), 137 deletions(-) create mode 100644 lighthouse-core/test/audits/__snapshots__/load-fast-enough-for-pwa-test.js.snap create mode 100644 lighthouse-core/test/audits/__snapshots__/metrics-test.js.snap create mode 100644 lighthouse-core/test/audits/__snapshots__/predictive-perf-test.js.snap create mode 100644 lighthouse-core/test/audits/byte-efficiency/__snapshots__/byte-efficiency-audit-test.js.snap create mode 100644 lighthouse-core/test/audits/metrics/__snapshots__/first-meaningful-paint-test.js.snap create mode 100644 lighthouse-core/test/gather/computed/metrics/__snapshots__/estimated-input-latency-test.js.snap create mode 100644 lighthouse-core/test/gather/computed/metrics/__snapshots__/first-contentful-paint-test.js.snap create mode 100644 lighthouse-core/test/gather/computed/metrics/__snapshots__/first-cpu-idle-test.js.snap create mode 100644 lighthouse-core/test/gather/computed/metrics/__snapshots__/first-meaningful-paint-test.js.snap create mode 100644 lighthouse-core/test/gather/computed/metrics/__snapshots__/interactive-test.js.snap create mode 100644 lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-estimated-input-latency-test.js.snap create mode 100644 lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-contentful-paint-test.js.snap create mode 100644 lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-cpu-idle-test.js.snap create mode 100644 lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-meaningful-paint-test.js.snap create mode 100644 lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-interactive-test.js.snap create mode 100644 lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-speed-index-test.js.snap create mode 100644 lighthouse-core/test/gather/computed/metrics/__snapshots__/speed-index-test.js.snap diff --git a/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js b/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js index ffd6f304cb22..c6ccd495d0a9 100644 --- a/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js +++ b/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js @@ -5,7 +5,10 @@ */ 'use strict'; -const DNS_RESOLUTION_RTT_MULTIPLIER = 1.5; +// A DNS lookup will usually take 1 roundtrip, connection latency plus potentially extra DNS routing +// Example: https://www.webpagetest.org/result/180703_3A_e33ec79747c002ed4d7bcbfc81462203/1/details/#waterfall_view_step1 +// All DNS lookups are 1-2 RTT times, usually 1-1.5 +const DNS_RESOLUTION_RTT_MULTIPLIER = 1; module.exports = class DNSCache { /** @@ -30,12 +33,11 @@ module.exports = class DNSCache { /** * @param {LH.Artifacts.NetworkRequest} request - * @param {number=} requestedAt + * @param {{requestedAt: number, shouldUpdateCache: boolean}} options * @return {number} */ - getTimeUntilResolution(request, requestedAt) { - const shouldUpdateCache = typeof requestedAt === 'undefined'; - requestedAt = requestedAt || 0; + getTimeUntilResolution(request, options) { + const {requestedAt = 0, shouldUpdateCache = false} = options || {} const domain = request.parsedURL.host; const cacheEntry = this._resolvedDomainNames.get(domain); diff --git a/lighthouse-core/lib/dependency-graph/simulator/simulator.js b/lighthouse-core/lib/dependency-graph/simulator/simulator.js index a2757aaf7192..50b9d446579c 100644 --- a/lighthouse-core/lib/dependency-graph/simulator/simulator.js +++ b/lighthouse-core/lib/dependency-graph/simulator/simulator.js @@ -274,7 +274,10 @@ class Simulator { } else { // If we're estimating time remaining, we already acquired a connection for this record, definitely non-null const connection = /** @type {TcpConnection} */ (this._acquireConnection(record)); - const dnsResolutionTime = this._dns.getTimeUntilResolution(record, timingData.startTime); + const dnsResolutionTime = this._dns.getTimeUntilResolution(record, { + requestedAt: timingData.startTime, + shouldUpdateCache: false, + }); const timeAlreadyElapsed = timingData.timeElapsed; const calculation = connection.simulateDownloadUntil( record.transferSize - timingData.bytesDownloaded, @@ -323,7 +326,10 @@ class Simulator { const record = node.record; // If we're updating the progress, we already acquired a connection for this record, definitely non-null const connection = /** @type {TcpConnection} */ (this._acquireConnection(record)); - const dnsResolutionTime = this._dns.getTimeUntilResolution(record, timingData.startTime); + const dnsResolutionTime = this._dns.getTimeUntilResolution(record, { + requestedAt: timingData.startTime, + shouldUpdateCache: true, + }); const calculation = connection.simulateDownloadUntil( record.transferSize - timingData.bytesDownloaded, { diff --git a/lighthouse-core/test/audits/__snapshots__/load-fast-enough-for-pwa-test.js.snap b/lighthouse-core/test/audits/__snapshots__/load-fast-enough-for-pwa-test.js.snap new file mode 100644 index 000000000000..72d622d91e2d --- /dev/null +++ b/lighthouse-core/test/audits/__snapshots__/load-fast-enough-for-pwa-test.js.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`PWA: load-fast-enough-for-pwa audit overrides with simulated result when throttling is modified 1`] = `4782`; diff --git a/lighthouse-core/test/audits/__snapshots__/metrics-test.js.snap b/lighthouse-core/test/audits/__snapshots__/metrics-test.js.snap new file mode 100644 index 000000000000..768974e0a671 --- /dev/null +++ b/lighthouse-core/test/audits/__snapshots__/metrics-test.js.snap @@ -0,0 +1,38 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Performance: metrics evaluates valid input correctly 1`] = ` +Object { + "estimatedInputLatency": 104, + "estimatedInputLatencyTs": undefined, + "firstCPUIdle": 4782, + "firstCPUIdleTs": undefined, + "firstContentfulPaint": 1293, + "firstContentfulPaintTs": undefined, + "firstMeaningfulPaint": 2186, + "firstMeaningfulPaintTs": undefined, + "interactive": 4782, + "interactiveTs": undefined, + "observedDomContentLoaded": 560, + "observedDomContentLoadedTs": 225414732309, + "observedFirstContentfulPaint": 499, + "observedFirstContentfulPaintTs": 225414670885, + "observedFirstMeaningfulPaint": 783, + "observedFirstMeaningfulPaintTs": 225414955343, + "observedFirstPaint": 499, + "observedFirstPaintTs": 225414670868, + "observedFirstVisualChange": 520, + "observedFirstVisualChangeTs": 225414692015, + "observedLastVisualChange": 818, + "observedLastVisualChangeTs": 225414990015, + "observedLoad": 2199, + "observedLoadTs": 225416370913, + "observedNavigationStart": 0, + "observedNavigationStartTs": 225414172015, + "observedSpeedIndex": 605, + "observedSpeedIndexTs": 225414776724, + "observedTraceEnd": 12540, + "observedTraceEndTs": 225426711887, + "speedIndex": 1559, + "speedIndexTs": undefined, +} +`; diff --git a/lighthouse-core/test/audits/__snapshots__/predictive-perf-test.js.snap b/lighthouse-core/test/audits/__snapshots__/predictive-perf-test.js.snap new file mode 100644 index 000000000000..c22891c43e1c --- /dev/null +++ b/lighthouse-core/test/audits/__snapshots__/predictive-perf-test.js.snap @@ -0,0 +1,24 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Performance: predictive performance audit should compute the predicted values 1`] = ` +Object { + "optimisticEIL": 101.16666666666667, + "optimisticFCP": 760.6100000208243, + "optimisticFMP": 1061.4020000561136, + "optimisticSI": 604.7093900063634, + "optimisticTTFCPUI": 2901.3320000492968, + "optimisticTTI": 2901.3320000492968, + "pessimisticEIL": 157.66666666666666, + "pessimisticFCP": 760.6100000208243, + "pessimisticFMP": 1347.6100000208241, + "pessimisticSI": 1479.9229894831612, + "pessimisticTTFCPUI": 3202.377000061097, + "pessimisticTTI": 3202.377000061097, + "roughEstimateOfEIL": 103.53333333333333, + "roughEstimateOfFCP": 1293.0370000354012, + "roughEstimateOfFMP": 2186.1969000377458, + "roughEstimateOfSI": 1558.5430891729634, + "roughEstimateOfTTFCPUI": 4781.8688500570715, + "roughEstimateOfTTI": 4781.8688500570715, +} +`; diff --git a/lighthouse-core/test/audits/byte-efficiency/__snapshots__/byte-efficiency-audit-test.js.snap b/lighthouse-core/test/audits/byte-efficiency/__snapshots__/byte-efficiency-audit-test.js.snap new file mode 100644 index 000000000000..686cdf65a4e1 --- /dev/null +++ b/lighthouse-core/test/audits/byte-efficiency/__snapshots__/byte-efficiency-audit-test.js.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Byte efficiency base audit should allow overriding of computeWasteWithTTIGraph 1`] = ` +Object { + "default": 1330, + "justTTI": 800, +} +`; + +exports[`Byte efficiency base audit should create load simulator with the specified settings 1`] = `1330`; + +exports[`Byte efficiency base audit should create load simulator with the specified settings 2`] = `22650`; diff --git a/lighthouse-core/test/audits/byte-efficiency/byte-efficiency-audit-test.js b/lighthouse-core/test/audits/byte-efficiency/byte-efficiency-audit-test.js index 330e33b28163..598eee70c121 100644 --- a/lighthouse-core/test/audits/byte-efficiency/byte-efficiency-audit-test.js +++ b/lighthouse-core/test/audits/byte-efficiency/byte-efficiency-audit-test.js @@ -218,12 +218,14 @@ describe('Byte efficiency base audit', () => { let settings = {throttlingMethod: 'simulate', throttling: modestThrottling}; let result = await MockAudit.audit(artifacts, {settings}); // expect modest savings - assert.equal(result.rawValue, 1480); + expect(result.rawValue).toBeLessThan(5000); + expect(result.rawValue).toMatchSnapshot(); settings = {throttlingMethod: 'simulate', throttling: ultraSlowThrottling}; result = await MockAudit.audit(artifacts, {settings}); // expect lots of savings - assert.equal(result.rawValue, 22350); + expect(result.rawValue).not.toBeLessThan(5000); + expect(result.rawValue).toMatchSnapshot(); }); it('should allow overriding of computeWasteWithTTIGraph', async () => { @@ -251,8 +253,8 @@ describe('Byte efficiency base audit', () => { const settings = {throttlingMethod: 'simulate', throttling: modestThrottling}; const result = await MockAudit.audit(artifacts, {settings}); const resultTti = await MockJustTTIAudit.audit(artifacts, {settings}); - // expect more savings from default - assert.equal(result.rawValue, 1480); - assert.equal(resultTti.rawValue, 800); + // expect less savings with just TTI + expect(resultTti.rawValue).toBeLessThan(result.rawValue); + expect({default: result.rawValue, justTTI: resultTti.rawValue}).toMatchSnapshot(); }); }); diff --git a/lighthouse-core/test/audits/byte-efficiency/render-blocking-resources-test.js b/lighthouse-core/test/audits/byte-efficiency/render-blocking-resources-test.js index d3bc695fa1c5..e1a71999a033 100644 --- a/lighthouse-core/test/audits/byte-efficiency/render-blocking-resources-test.js +++ b/lighthouse-core/test/audits/byte-efficiency/render-blocking-resources-test.js @@ -51,7 +51,7 @@ describe('Render blocking resources audit', () => { beforeEach(() => { requestId = 1; record = props => { - const parsedURL = {securityOrigin: 'http://example.com'}; + const parsedURL = {host: 'example.com', securityOrigin: 'http://example.com'}; return Object.assign({parsedURL, requestId: requestId++}, props); }; }); diff --git a/lighthouse-core/test/audits/load-fast-enough-for-pwa-test.js b/lighthouse-core/test/audits/load-fast-enough-for-pwa-test.js index be5e5147f815..283f9bccf45e 100644 --- a/lighthouse-core/test/audits/load-fast-enough-for-pwa-test.js +++ b/lighthouse-core/test/audits/load-fast-enough-for-pwa-test.js @@ -67,6 +67,7 @@ describe('PWA: load-fast-enough-for-pwa audit', () => { const settings = {throttlingMethod: 'provided', throttling: {rttMs: 40, throughput: 100000}}; const result = await FastPWAAudit.audit(artifacts, {settings}); - assert.equal(Math.round(result.rawValue), 4309); + expect(result.rawValue).toBeGreaterThan(2000); + expect(Math.round(result.rawValue)).toMatchSnapshot(); }); }); diff --git a/lighthouse-core/test/audits/metrics-test.js b/lighthouse-core/test/audits/metrics-test.js index 7fced6377d7d..bfb4f9658889 100644 --- a/lighthouse-core/test/audits/metrics-test.js +++ b/lighthouse-core/test/audits/metrics-test.js @@ -27,41 +27,6 @@ describe('Performance: metrics', () => { const settings = {throttlingMethod: 'simulate'}; const result = await Audit.audit(artifacts, {settings}); - - assert.deepStrictEqual(result.details.items[0], { - firstContentfulPaint: 1038, - firstContentfulPaintTs: undefined, - firstMeaningfulPaint: 1949, - firstMeaningfulPaintTs: undefined, - firstCPUIdle: 4309, - firstCPUIdleTs: undefined, - interactive: 4309, - interactiveTs: undefined, - speedIndex: 1461, - speedIndexTs: undefined, - estimatedInputLatency: 104, - estimatedInputLatencyTs: undefined, - - observedNavigationStart: 0, - observedNavigationStartTs: 225414172015, - observedFirstPaint: 499, - observedFirstPaintTs: 225414670868, - observedFirstContentfulPaint: 499, - observedFirstContentfulPaintTs: 225414670885, - observedFirstMeaningfulPaint: 783, - observedFirstMeaningfulPaintTs: 225414955343, - observedTraceEnd: 12540, - observedTraceEndTs: 225426711887, - observedLoad: 2199, - observedLoadTs: 225416370913, - observedDomContentLoaded: 560, - observedDomContentLoadedTs: 225414732309, - observedFirstVisualChange: 520, - observedFirstVisualChangeTs: 225414692015, - observedLastVisualChange: 818, - observedLastVisualChangeTs: 225414990015, - observedSpeedIndex: 605, - observedSpeedIndexTs: 225414776724, - }); + expect(result.details.items[0]).toMatchSnapshot(); }); }); diff --git a/lighthouse-core/test/audits/metrics/__snapshots__/first-meaningful-paint-test.js.snap b/lighthouse-core/test/audits/metrics/__snapshots__/first-meaningful-paint-test.js.snap new file mode 100644 index 000000000000..979dd39013e7 --- /dev/null +++ b/lighthouse-core/test/audits/metrics/__snapshots__/first-meaningful-paint-test.js.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Performance: first-meaningful-paint audit computes FMP correctly for simulated 1`] = ` +Object { + "displayValue": Array [ + "%10d ms", + 2186.1969000377458, + ], + "rawValue": 2186.1969000377458, + "score": 0.92, +} +`; diff --git a/lighthouse-core/test/audits/metrics/first-meaningful-paint-test.js b/lighthouse-core/test/audits/metrics/first-meaningful-paint-test.js index 162ee9cc9fe6..9aeee36c295a 100644 --- a/lighthouse-core/test/audits/metrics/first-meaningful-paint-test.js +++ b/lighthouse-core/test/audits/metrics/first-meaningful-paint-test.js @@ -39,8 +39,10 @@ describe('Performance: first-meaningful-paint audit', () => { const context = {options, settings: {throttlingMethod: 'simulate'}}; const fmpResult = await FMPAudit.audit(artifacts, context); - assert.equal(fmpResult.score, 0.96); - assert.equal(Util.formatDisplayValue(fmpResult.displayValue), '1,950\xa0ms'); - assert.equal(Math.round(fmpResult.rawValue), 1949); + expect({ + score: fmpResult.score, + rawValue: fmpResult.rawValue, + displayValue: fmpResult.displayValue, + }).toMatchSnapshot(); }); }); diff --git a/lighthouse-core/test/audits/predictive-perf-test.js b/lighthouse-core/test/audits/predictive-perf-test.js index 8d07e0a25be1..7375377fd63f 100644 --- a/lighthouse-core/test/audits/predictive-perf-test.js +++ b/lighthouse-core/test/audits/predictive-perf-test.js @@ -25,20 +25,12 @@ describe('Performance: predictive performance audit', () => { }, Runner.instantiateComputedArtifacts()); return PredictivePerf.audit(artifacts).then(output => { - assert.equal(output.score, 0.86); - assert.equal(Math.round(output.rawValue), 4309); - assert.equal(output.displayValue, '4,310\xa0ms'); + const metrics = output.details.items[0]; + for (const [key, value] in Object.entries(metrics)) { + if (Number.isFinite(value)) metrics[key] = Math.round(value); + } - const valueOf = name => Math.round(output.details.items[0][name]); - assert.equal(valueOf('roughEstimateOfFCP'), 1038); - assert.equal(valueOf('optimisticFCP'), 611); - assert.equal(valueOf('pessimisticFCP'), 611); - assert.equal(valueOf('roughEstimateOfFMP'), 1949); - assert.equal(valueOf('optimisticFMP'), 911); - assert.equal(valueOf('pessimisticFMP'), 1198); - assert.equal(valueOf('roughEstimateOfTTI'), 4309); - assert.equal(valueOf('optimisticTTI'), 2451); - assert.equal(valueOf('pessimisticTTI'), 2752); + expect(metrics).toMatchSnapshot(); }); }); }); diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/estimated-input-latency-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/estimated-input-latency-test.js.snap new file mode 100644 index 000000000000..2217fa45756b --- /dev/null +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/estimated-input-latency-test.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Metrics: EIL should compute a simulated value 1`] = ` +Object { + "optimistic": 101, + "pessimistic": 158, + "timing": 104, +} +`; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-contentful-paint-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-contentful-paint-test.js.snap new file mode 100644 index 000000000000..e0a6e5fa9951 --- /dev/null +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-contentful-paint-test.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Metrics: FCP should compute a simulated value 1`] = ` +Object { + "optimistic": 761, + "pessimistic": 761, + "timing": 1293, +} +`; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-cpu-idle-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-cpu-idle-test.js.snap new file mode 100644 index 000000000000..10f5cbe8fbb1 --- /dev/null +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-cpu-idle-test.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`FirstInteractive computed artifact: should simulate when settings specify 1`] = ` +Object { + "optimistic": 2901, + "pessimistic": 3202, + "timing": 4782, +} +`; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-meaningful-paint-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-meaningful-paint-test.js.snap new file mode 100644 index 000000000000..201f2596fe18 --- /dev/null +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-meaningful-paint-test.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Metrics: FMP should compute a simulated value 1`] = ` +Object { + "optimistic": 1061, + "pessimistic": 1348, + "timing": 2186, +} +`; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/interactive-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/interactive-test.js.snap new file mode 100644 index 000000000000..1531258c77d0 --- /dev/null +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/interactive-test.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Metrics: TTI should compute a simulated value 1`] = ` +Object { + "optimistic": 2901, + "pessimistic": 3202, + "timing": 4782, +} +`; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-estimated-input-latency-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-estimated-input-latency-test.js.snap new file mode 100644 index 000000000000..8b76d120edea --- /dev/null +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-estimated-input-latency-test.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Metrics: Lantern EIL should compute a simulated value 1`] = ` +Object { + "optimistic": 101, + "pessimistic": 158, + "timing": 104, +} +`; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-contentful-paint-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-contentful-paint-test.js.snap new file mode 100644 index 000000000000..16cda252dc16 --- /dev/null +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-contentful-paint-test.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Metrics: Lantern FCP should compute predicted value 1`] = ` +Object { + "optimistic": 761, + "pessimistic": 761, + "timing": 1293, +} +`; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-cpu-idle-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-cpu-idle-test.js.snap new file mode 100644 index 000000000000..9b94f6079771 --- /dev/null +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-cpu-idle-test.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Metrics: Lantern TTFCPUI should compute predicted value 1`] = ` +Object { + "optimistic": 2901, + "pessimistic": 3202, + "timing": 4782, +} +`; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-meaningful-paint-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-meaningful-paint-test.js.snap new file mode 100644 index 000000000000..f9de13441b02 --- /dev/null +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-meaningful-paint-test.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Metrics: Lantern FMP should compute predicted value 1`] = ` +Object { + "optimistic": 1061, + "pessimistic": 1348, + "timing": 2186, +} +`; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-interactive-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-interactive-test.js.snap new file mode 100644 index 000000000000..cdd0966a95dd --- /dev/null +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-interactive-test.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Metrics: Lantern TTI should compute predicted value 1`] = ` +Object { + "optimistic": 2901, + "pessimistic": 3202, + "timing": 4782, +} +`; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-speed-index-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-speed-index-test.js.snap new file mode 100644 index 000000000000..fbc7279c5b8d --- /dev/null +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-speed-index-test.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Metrics: Lantern Speed Index should compute predicted value 1`] = ` +Object { + "optimistic": 605, + "pessimistic": 1480, + "timing": 1559, +} +`; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/speed-index-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/speed-index-test.js.snap new file mode 100644 index 000000000000..7a795684f678 --- /dev/null +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/speed-index-test.js.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Metrics: Speed Index should compute a simulated value 1`] = ` +Object { + "optimistic": 605, + "pessimistic": 1480, + "timing": 1559, +} +`; diff --git a/lighthouse-core/test/gather/computed/metrics/estimated-input-latency-test.js b/lighthouse-core/test/gather/computed/metrics/estimated-input-latency-test.js index c4bcabd55164..8276233cb440 100644 --- a/lighthouse-core/test/gather/computed/metrics/estimated-input-latency-test.js +++ b/lighthouse-core/test/gather/computed/metrics/estimated-input-latency-test.js @@ -20,9 +20,11 @@ describe('Metrics: EIL', () => { const settings = {throttlingMethod: 'simulate'}; const result = await artifacts.requestEstimatedInputLatency({trace, devtoolsLog, settings}); - assert.equal(Math.round(result.timing), 104); - assert.equal(Math.round(result.optimisticEstimate.timeInMs), 101); - assert.equal(Math.round(result.pessimisticEstimate.timeInMs), 158); + expect({ + timing: Math.round(result.timing), + optimistic: Math.round(result.optimisticEstimate.timeInMs), + pessimistic: Math.round(result.pessimisticEstimate.timeInMs), + }).toMatchSnapshot(); }); it('should compute an observed value', async () => { diff --git a/lighthouse-core/test/gather/computed/metrics/first-contentful-paint-test.js b/lighthouse-core/test/gather/computed/metrics/first-contentful-paint-test.js index ec162bf352f4..8333c634952b 100644 --- a/lighthouse-core/test/gather/computed/metrics/first-contentful-paint-test.js +++ b/lighthouse-core/test/gather/computed/metrics/first-contentful-paint-test.js @@ -19,9 +19,11 @@ describe('Metrics: FCP', () => { const settings = {throttlingMethod: 'simulate'}; const result = await artifacts.requestFirstContentfulPaint({trace, devtoolsLog, settings}); - assert.equal(Math.round(result.timing), 1038); - assert.equal(Math.round(result.optimisticEstimate.timeInMs), 611); - assert.equal(Math.round(result.pessimisticEstimate.timeInMs), 611); + expect({ + timing: Math.round(result.timing), + optimistic: Math.round(result.optimisticEstimate.timeInMs), + pessimistic: Math.round(result.pessimisticEstimate.timeInMs), + }).toMatchSnapshot(); assert.equal(result.optimisticEstimate.nodeTimings.size, 2); assert.equal(result.pessimisticEstimate.nodeTimings.size, 2); assert.ok(result.optimisticGraph, 'should have created optimistic graph'); diff --git a/lighthouse-core/test/gather/computed/metrics/first-cpu-idle-test.js b/lighthouse-core/test/gather/computed/metrics/first-cpu-idle-test.js index c09e891034c3..4d0602972b8d 100644 --- a/lighthouse-core/test/gather/computed/metrics/first-cpu-idle-test.js +++ b/lighthouse-core/test/gather/computed/metrics/first-cpu-idle-test.js @@ -63,9 +63,11 @@ describe('FirstInteractive computed artifact:', () => { const artifacts = Runner.instantiateComputedArtifacts(); const result = await artifacts.requestFirstCPUIdle({trace, devtoolsLog, settings}); - assert.equal(Math.round(result.timing), 4309); - assert.equal(Math.round(result.optimisticEstimate.timeInMs), 2451); - assert.equal(Math.round(result.pessimisticEstimate.timeInMs), 2752); + expect({ + timing: Math.round(result.timing), + optimistic: Math.round(result.optimisticEstimate.timeInMs), + pessimistic: Math.round(result.pessimisticEstimate.timeInMs), + }).toMatchSnapshot(); assert.equal(result.optimisticEstimate.nodeTimings.size, 19); assert.equal(result.pessimisticEstimate.nodeTimings.size, 79); assert.ok(result.optimisticGraph, 'should have created optimistic graph'); diff --git a/lighthouse-core/test/gather/computed/metrics/first-meaningful-paint-test.js b/lighthouse-core/test/gather/computed/metrics/first-meaningful-paint-test.js index f3cb850289fc..51accdf4b39d 100644 --- a/lighthouse-core/test/gather/computed/metrics/first-meaningful-paint-test.js +++ b/lighthouse-core/test/gather/computed/metrics/first-meaningful-paint-test.js @@ -39,9 +39,11 @@ describe('Metrics: FMP', () => { const result = await artifacts.requestFirstMeaningfulPaint({trace, devtoolsLog, settings}); - assert.equal(Math.round(result.timing), 1949); - assert.equal(Math.round(result.optimisticEstimate.timeInMs), 911); - assert.equal(Math.round(result.pessimisticEstimate.timeInMs), 1198); + expect({ + timing: Math.round(result.timing), + optimistic: Math.round(result.optimisticEstimate.timeInMs), + pessimistic: Math.round(result.pessimisticEstimate.timeInMs), + }).toMatchSnapshot(); assert.equal(result.optimisticEstimate.nodeTimings.size, 4); assert.equal(result.pessimisticEstimate.nodeTimings.size, 7); assert.ok(result.optimisticGraph, 'should have created optimistic graph'); diff --git a/lighthouse-core/test/gather/computed/metrics/interactive-test.js b/lighthouse-core/test/gather/computed/metrics/interactive-test.js index 32826f6e8571..390f9573f3cc 100644 --- a/lighthouse-core/test/gather/computed/metrics/interactive-test.js +++ b/lighthouse-core/test/gather/computed/metrics/interactive-test.js @@ -34,9 +34,11 @@ describe('Metrics: TTI', () => { const settings = {throttlingMethod: 'simulate'}; const result = await artifacts.requestInteractive({trace, devtoolsLog, settings}); - assert.equal(Math.round(result.timing), 4309); - assert.equal(Math.round(result.optimisticEstimate.timeInMs), 2451); - assert.equal(Math.round(result.pessimisticEstimate.timeInMs), 2752); + expect({ + timing: Math.round(result.timing), + optimistic: Math.round(result.optimisticEstimate.timeInMs), + pessimistic: Math.round(result.pessimisticEstimate.timeInMs), + }).toMatchSnapshot(); assert.equal(result.optimisticEstimate.nodeTimings.size, 19); assert.equal(result.pessimisticEstimate.nodeTimings.size, 79); assert.ok(result.optimisticGraph, 'should have created optimistic graph'); diff --git a/lighthouse-core/test/gather/computed/metrics/lantern-estimated-input-latency-test.js b/lighthouse-core/test/gather/computed/metrics/lantern-estimated-input-latency-test.js index c6b1391c9861..918448457ffc 100644 --- a/lighthouse-core/test/gather/computed/metrics/lantern-estimated-input-latency-test.js +++ b/lighthouse-core/test/gather/computed/metrics/lantern-estimated-input-latency-test.js @@ -6,7 +6,6 @@ 'use strict'; const Runner = require('../../../../runner'); -const assert = require('assert'); const trace = require('../../../fixtures/traces/progressive-app-m60.json'); const devtoolsLog = require('../../../fixtures/traces/progressive-app-m60.devtools.log.json'); @@ -20,8 +19,10 @@ describe('Metrics: Lantern EIL', () => { const data = {trace, devtoolsLog, settings}; const result = await artifacts.requestLanternEstimatedInputLatency(data); - assert.equal(Math.round(result.timing), 104); - assert.equal(Math.round(result.optimisticEstimate.timeInMs), 101); - assert.equal(Math.round(result.pessimisticEstimate.timeInMs), 158); + expect({ + timing: Math.round(result.timing), + optimistic: Math.round(result.optimisticEstimate.timeInMs), + pessimistic: Math.round(result.pessimisticEstimate.timeInMs), + }).toMatchSnapshot(); }); }); diff --git a/lighthouse-core/test/gather/computed/metrics/lantern-first-contentful-paint-test.js b/lighthouse-core/test/gather/computed/metrics/lantern-first-contentful-paint-test.js index 3e98a2bf5e0b..4bbe3222d69f 100644 --- a/lighthouse-core/test/gather/computed/metrics/lantern-first-contentful-paint-test.js +++ b/lighthouse-core/test/gather/computed/metrics/lantern-first-contentful-paint-test.js @@ -18,9 +18,11 @@ describe('Metrics: Lantern FCP', () => { const result = await artifacts.requestLanternFirstContentfulPaint({trace, devtoolsLog, settings: {}}); - assert.equal(Math.round(result.timing), 1038); - assert.equal(Math.round(result.optimisticEstimate.timeInMs), 611); - assert.equal(Math.round(result.pessimisticEstimate.timeInMs), 611); + expect({ + timing: Math.round(result.timing), + optimistic: Math.round(result.optimisticEstimate.timeInMs), + pessimistic: Math.round(result.pessimisticEstimate.timeInMs), + }).toMatchSnapshot(); assert.equal(result.optimisticEstimate.nodeTimings.size, 2); assert.equal(result.pessimisticEstimate.nodeTimings.size, 2); assert.ok(result.optimisticGraph, 'should have created optimistic graph'); diff --git a/lighthouse-core/test/gather/computed/metrics/lantern-first-cpu-idle-test.js b/lighthouse-core/test/gather/computed/metrics/lantern-first-cpu-idle-test.js index 5bd08faf6631..9a3837277c4e 100644 --- a/lighthouse-core/test/gather/computed/metrics/lantern-first-cpu-idle-test.js +++ b/lighthouse-core/test/gather/computed/metrics/lantern-first-cpu-idle-test.js @@ -17,9 +17,11 @@ describe('Metrics: Lantern TTFCPUI', () => { const artifacts = Runner.instantiateComputedArtifacts(); const result = await artifacts.requestLanternFirstCPUIdle({trace, devtoolsLog, settings: {}}); - assert.equal(Math.round(result.timing), 4309); - assert.equal(Math.round(result.optimisticEstimate.timeInMs), 2451); - assert.equal(Math.round(result.pessimisticEstimate.timeInMs), 2752); + expect({ + timing: Math.round(result.timing), + optimistic: Math.round(result.optimisticEstimate.timeInMs), + pessimistic: Math.round(result.pessimisticEstimate.timeInMs), + }).toMatchSnapshot(); assert.equal(result.optimisticEstimate.nodeTimings.size, 19); assert.equal(result.pessimisticEstimate.nodeTimings.size, 79); assert.ok(result.optimisticGraph, 'should have created optimistic graph'); diff --git a/lighthouse-core/test/gather/computed/metrics/lantern-first-meaningful-paint-test.js b/lighthouse-core/test/gather/computed/metrics/lantern-first-meaningful-paint-test.js index 7c39aaa91d43..72adf25b475c 100644 --- a/lighthouse-core/test/gather/computed/metrics/lantern-first-meaningful-paint-test.js +++ b/lighthouse-core/test/gather/computed/metrics/lantern-first-meaningful-paint-test.js @@ -18,9 +18,11 @@ describe('Metrics: Lantern FMP', () => { const result = await artifacts.requestLanternFirstMeaningfulPaint({trace, devtoolsLog, settings: {}}); - assert.equal(Math.round(result.timing), 1949); - assert.equal(Math.round(result.optimisticEstimate.timeInMs), 911); - assert.equal(Math.round(result.pessimisticEstimate.timeInMs), 1198); + expect({ + timing: Math.round(result.timing), + optimistic: Math.round(result.optimisticEstimate.timeInMs), + pessimistic: Math.round(result.pessimisticEstimate.timeInMs), + }).toMatchSnapshot(); assert.equal(result.optimisticEstimate.nodeTimings.size, 4); assert.equal(result.pessimisticEstimate.nodeTimings.size, 7); assert.ok(result.optimisticGraph, 'should have created optimistic graph'); diff --git a/lighthouse-core/test/gather/computed/metrics/lantern-interactive-test.js b/lighthouse-core/test/gather/computed/metrics/lantern-interactive-test.js index d9f271a9acb3..3385ed6d2d89 100644 --- a/lighthouse-core/test/gather/computed/metrics/lantern-interactive-test.js +++ b/lighthouse-core/test/gather/computed/metrics/lantern-interactive-test.js @@ -18,9 +18,11 @@ describe('Metrics: Lantern TTI', () => { const result = await artifacts.requestLanternInteractive({trace, devtoolsLog, settings: {}}); - assert.equal(Math.round(result.timing), 4309); - assert.equal(Math.round(result.optimisticEstimate.timeInMs), 2451); - assert.equal(Math.round(result.pessimisticEstimate.timeInMs), 2752); + expect({ + timing: Math.round(result.timing), + optimistic: Math.round(result.optimisticEstimate.timeInMs), + pessimistic: Math.round(result.pessimisticEstimate.timeInMs), + }).toMatchSnapshot(); assert.equal(result.optimisticEstimate.nodeTimings.size, 19); assert.equal(result.pessimisticEstimate.nodeTimings.size, 79); assert.ok(result.optimisticGraph, 'should have created optimistic graph'); diff --git a/lighthouse-core/test/gather/computed/metrics/lantern-speed-index-test.js b/lighthouse-core/test/gather/computed/metrics/lantern-speed-index-test.js index f94612ef6eb8..92f269c22605 100644 --- a/lighthouse-core/test/gather/computed/metrics/lantern-speed-index-test.js +++ b/lighthouse-core/test/gather/computed/metrics/lantern-speed-index-test.js @@ -6,7 +6,6 @@ 'use strict'; const Runner = require('../../../../runner'); -const assert = require('assert'); const trace = require('../../../fixtures/traces/progressive-app-m60.json'); const devtoolsLog = require('../../../fixtures/traces/progressive-app-m60.devtools.log.json'); @@ -17,8 +16,10 @@ describe('Metrics: Lantern Speed Index', () => { const artifacts = Runner.instantiateComputedArtifacts(); const result = await artifacts.requestLanternSpeedIndex({trace, devtoolsLog, settings: {}}); - assert.equal(Math.round(result.timing), 1461); - assert.equal(Math.round(result.optimisticEstimate.timeInMs), 605); - assert.equal(Math.round(result.pessimisticEstimate.timeInMs), 1330); + expect({ + timing: Math.round(result.timing), + optimistic: Math.round(result.optimisticEstimate.timeInMs), + pessimistic: Math.round(result.pessimisticEstimate.timeInMs), + }).toMatchSnapshot(); }); }); diff --git a/lighthouse-core/test/gather/computed/metrics/speed-index-test.js b/lighthouse-core/test/gather/computed/metrics/speed-index-test.js index ed8ea26843cf..f5b2bad88e70 100644 --- a/lighthouse-core/test/gather/computed/metrics/speed-index-test.js +++ b/lighthouse-core/test/gather/computed/metrics/speed-index-test.js @@ -19,9 +19,11 @@ describe('Metrics: Speed Index', () => { const settings = {throttlingMethod: 'simulate'}; const result = await artifacts.requestSpeedIndex({trace, devtoolsLog, settings}); - assert.equal(Math.round(result.timing), 1461); - assert.equal(Math.round(result.optimisticEstimate.timeInMs), 605); - assert.equal(Math.round(result.pessimisticEstimate.timeInMs), 1330); + expect({ + timing: Math.round(result.timing), + optimistic: Math.round(result.optimisticEstimate.timeInMs), + pessimistic: Math.round(result.pessimisticEstimate.timeInMs), + }).toMatchSnapshot(); }); it('should compute an observed value', async () => { diff --git a/lighthouse-core/test/lib/dependency-graph/simulator/simulator-test.js b/lighthouse-core/test/lib/dependency-graph/simulator/simulator-test.js index caa7ae143559..36bfe6a366aa 100644 --- a/lighthouse-core/test/lib/dependency-graph/simulator/simulator-test.js +++ b/lighthouse-core/test/lib/dependency-graph/simulator/simulator-test.js @@ -21,7 +21,7 @@ function request(opts) { requestId: opts.requestId || nextRequestId++, url, transferSize: opts.transferSize || 1000, - parsedURL: {scheme, securityOrigin: url}, + parsedURL: {scheme, host: 'example.com', securityOrigin: url}, timing: opts.timing, }, opts); } @@ -50,9 +50,9 @@ describe('DependencyGraph/Simulator', () => { const rootNode = new NetworkNode(request({})); const simulator = new Simulator({serverResponseTimeByOrigin}); const result = simulator.simulate(rootNode); - // should be 2 RTTs and 500ms for the server response time - assert.equal(result.timeInMs, 300 + 500); - assertNodeTiming(result, rootNode, {startTime: 0, endTime: 800}); + // should be 3 RTTs and 500ms for the server response time + assert.equal(result.timeInMs, 450 + 500); + assertNodeTiming(result, rootNode, {startTime: 0, endTime: 950}); }); it('should simulate basic mixed graphs', () => { @@ -65,10 +65,10 @@ describe('DependencyGraph/Simulator', () => { cpuSlowdownMultiplier: 5, }); const result = simulator.simulate(rootNode); - // should be 2 RTTs and 500ms for the server response time + 200 CPU - assert.equal(result.timeInMs, 300 + 500 + 200); - assertNodeTiming(result, rootNode, {startTime: 0, endTime: 800}); - assertNodeTiming(result, cpuNode, {startTime: 800, endTime: 1000}); + // should be 3 RTTs and 500ms for the server response time + 200 CPU + assert.equal(result.timeInMs, 450 + 500 + 200); + assertNodeTiming(result, rootNode, {startTime: 0, endTime: 950}); + assertNodeTiming(result, cpuNode, {startTime: 950, endTime: 1150}); }); it('should simulate basic network waterfall graphs', () => { @@ -83,12 +83,12 @@ describe('DependencyGraph/Simulator', () => { const simulator = new Simulator({serverResponseTimeByOrigin}); const result = simulator.simulate(nodeA); - // should be 800ms each for A, B, C, D - assert.equal(result.timeInMs, 3200); - assertNodeTiming(result, nodeA, {startTime: 0, endTime: 800}); - assertNodeTiming(result, nodeB, {startTime: 800, endTime: 1600}); - assertNodeTiming(result, nodeC, {startTime: 1600, endTime: 2400}); - assertNodeTiming(result, nodeD, {startTime: 2400, endTime: 3200}); + // should be 950ms for A, 800ms each for B, C, D + assert.equal(result.timeInMs, 3350); + 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}); }); it('should simulate cached network graphs', () => { @@ -120,11 +120,11 @@ describe('DependencyGraph/Simulator', () => { }); const result = simulator.simulate(nodeA); // should be 800ms A, then 1000 ms total for B, C, D in serial - assert.equal(result.timeInMs, 1800); - assertNodeTiming(result, nodeA, {startTime: 0, endTime: 800}); - assertNodeTiming(result, nodeB, {startTime: 800, endTime: 900}); - assertNodeTiming(result, nodeC, {startTime: 900, endTime: 1500}); - assertNodeTiming(result, nodeD, {startTime: 1500, endTime: 1800}); + assert.equal(result.timeInMs, 1950); + assertNodeTiming(result, nodeA, {startTime: 0, endTime: 950}); + assertNodeTiming(result, nodeB, {startTime: 950, endTime: 1050}); + assertNodeTiming(result, nodeC, {startTime: 1050, endTime: 1650}); + assertNodeTiming(result, nodeD, {startTime: 1650, endTime: 1950}); }); it('should simulate basic network waterfall graphs with CPU', () => { @@ -146,8 +146,8 @@ describe('DependencyGraph/Simulator', () => { cpuSlowdownMultiplier: 5, }); const result = simulator.simulate(nodeA); - // should be 800ms each for A, B, C, D, with F finishing 400 ms after D - assert.equal(result.timeInMs, 3600); + // should be 950ms for A, 800ms each for B, C, D, with F finishing 400 ms after D + assert.equal(result.timeInMs, 3750); }); it('should simulate basic parallel requests', () => { @@ -162,8 +162,8 @@ describe('DependencyGraph/Simulator', () => { const simulator = new Simulator({serverResponseTimeByOrigin}); const result = simulator.simulate(nodeA); - // should be 800ms for A and 950ms for C (2 round trips of downloading) - assert.equal(result.timeInMs, 800 + 950); + // should be 950ms for A and 950ms for C (2 round trips of downloading, but no DNS) + assert.equal(result.timeInMs, 950 + 950); }); it('should not reuse connections', () => { @@ -178,24 +178,31 @@ describe('DependencyGraph/Simulator', () => { const simulator = new Simulator({serverResponseTimeByOrigin}); const result = simulator.simulate(nodeA); - // should be 800ms for A and 650ms for the next 3 - assert.equal(result.timeInMs, 800 + 650 * 3); + // should be 950ms for A and 650ms for the next 3 + assert.equal(result.timeInMs, 950 + 650 * 3); }); it('should adjust throughput based on number of requests', () => { const nodeA = new NetworkNode(request({})); const nodeB = new NetworkNode(request({})); - const nodeC = new NetworkNode(request({transferSize: 15000})); + const nodeC = new NetworkNode(request({transferSize: 14000})); const nodeD = new NetworkNode(request({})); nodeA.addDependent(nodeB); nodeA.addDependent(nodeC); nodeA.addDependent(nodeD); - const simulator = new Simulator({serverResponseTimeByOrigin}); + // 80 kbps while all 3 download at 150ms/RT = ~1460 bytes/RT + // 240 kbps while the last one finishes at 150ms/RT = ~4380 bytes/RT + // ~14000 bytes = 5 RTs + // 1 RT 80 kbps b/c its shared + // 1 RT 80 kbps b/c it needs to grow congestion window from being shared + // 1 RT 160 kbps b/c TCP + // 2 RT 240 kbps b/c throughput cap + const simulator = new Simulator({serverResponseTimeByOrigin, throughput: 240000}); const result = simulator.simulate(nodeA); - // should be 800ms for A and 950ms for C (2 round trips of downloading) - assert.equal(result.timeInMs, 800 + 950); + // should be 950ms for A and 1400ms for C (5 round trips of downloading) + assert.equal(result.timeInMs, 950 + (150 + 750 + 500)); }); it('should simulate two graphs in a row', () => { @@ -211,8 +218,8 @@ describe('DependencyGraph/Simulator', () => { nodeA.addDependent(nodeD); const resultA = simulator.simulate(nodeA); - // should be 800ms for A and 950ms for C (2 round trips of downloading) - assert.equal(resultA.timeInMs, 800 + 950); + // should be 950ms for A and 950ms for C (2 round trips of downloading, no DNS) + assert.equal(resultA.timeInMs, 950 + 950); const nodeE = new NetworkNode(request({})); const nodeF = new NetworkNode(request({})); @@ -222,8 +229,8 @@ describe('DependencyGraph/Simulator', () => { nodeE.addDependent(nodeG); const resultB = simulator.simulate(nodeE); - // should be 800ms for E and 800ms for F/G - assert.equal(resultB.timeInMs, 800 + 800); + // should be 950ms for E and 800ms for F/G + assert.equal(resultB.timeInMs, 950 + 800); }); it('should throw (not hang) on graphs with cycles', () => { From 8aede568b0beb71bdb6bc1af4c34aeb76a18d119 Mon Sep 17 00:00:00 2001 From: Patrick Hulce Date: Fri, 6 Jul 2018 17:33:58 -0700 Subject: [PATCH 3/4] snapshot of 2x --- .../metrics/lantern-first-contentful-paint.js | 4 +- .../metrics/lantern-first-cpu-idle.js | 12 ++ .../metrics/lantern-first-meaningful-paint.js | 6 +- .../computed/metrics/lantern-interactive.js | 6 +- .../dependency-graph/simulator/dns-cache.js | 22 +- .../dependency-graph/simulator/simulator.js | 2 +- .../load-fast-enough-for-pwa-test.js.snap | 2 +- .../audits/__snapshots__/metrics-test.js.snap | 10 +- .../predictive-perf-test.js.snap | 36 ++-- .../byte-efficiency-audit-test.js.snap | 4 +- .../first-meaningful-paint-test.js.snap | 6 +- .../test/audits/predictive-perf-test.js | 4 +- .../lantern-master-computed-values.json | 198 +++++++++--------- .../first-contentful-paint-test.js.snap | 6 +- .../__snapshots__/first-cpu-idle-test.js.snap | 6 +- .../first-meaningful-paint-test.js.snap | 6 +- .../__snapshots__/interactive-test.js.snap | 6 +- ...antern-first-contentful-paint-test.js.snap | 6 +- .../lantern-first-cpu-idle-test.js.snap | 6 +- ...antern-first-meaningful-paint-test.js.snap | 6 +- .../lantern-interactive-test.js.snap | 6 +- .../lantern-speed-index-test.js.snap | 4 +- .../__snapshots__/speed-index-test.js.snap | 4 +- .../simulator/dns-cache-test.js | 64 ++++++ .../simulator/simulator-test.js | 13 ++ 25 files changed, 268 insertions(+), 177 deletions(-) create mode 100644 lighthouse-core/test/lib/dependency-graph/simulator/dns-cache-test.js diff --git a/lighthouse-core/gather/computed/metrics/lantern-first-contentful-paint.js b/lighthouse-core/gather/computed/metrics/lantern-first-contentful-paint.js index fcec9ff7d281..1f6cc7f6edd7 100644 --- a/lighthouse-core/gather/computed/metrics/lantern-first-contentful-paint.js +++ b/lighthouse-core/gather/computed/metrics/lantern-first-contentful-paint.js @@ -20,8 +20,8 @@ class FirstContentfulPaint extends MetricArtifact { */ get COEFFICIENTS() { return { - intercept: 600, - optimistic: 0.6, + intercept: 0, + optimistic: 0.5, pessimistic: 0.5, }; } diff --git a/lighthouse-core/gather/computed/metrics/lantern-first-cpu-idle.js b/lighthouse-core/gather/computed/metrics/lantern-first-cpu-idle.js index a72b17750447..df89c1009e04 100644 --- a/lighthouse-core/gather/computed/metrics/lantern-first-cpu-idle.js +++ b/lighthouse-core/gather/computed/metrics/lantern-first-cpu-idle.js @@ -14,6 +14,18 @@ class LanternFirstCPUIdle extends LanternInteractive { return 'LanternFirstCPUIdle'; } + /** + * @return {LH.Gatherer.Simulation.MetricCoefficients} + */ + get COEFFICIENTS() { + return { + intercept: 0, + optimistic: 1, + pessimistic: 0, + }; + } + + /** * @param {LH.Gatherer.Simulation.Result} simulation * @param {Object} extras diff --git a/lighthouse-core/gather/computed/metrics/lantern-first-meaningful-paint.js b/lighthouse-core/gather/computed/metrics/lantern-first-meaningful-paint.js index ca0b0228d27b..9bbcbe262002 100644 --- a/lighthouse-core/gather/computed/metrics/lantern-first-meaningful-paint.js +++ b/lighthouse-core/gather/computed/metrics/lantern-first-meaningful-paint.js @@ -20,9 +20,9 @@ class FirstMeaningfulPaint extends MetricArtifact { */ get COEFFICIENTS() { return { - intercept: 900, - optimistic: 0.45, - pessimistic: 0.6, + intercept: 0, + optimistic: 0.5, + pessimistic: 0.5, }; } diff --git a/lighthouse-core/gather/computed/metrics/lantern-interactive.js b/lighthouse-core/gather/computed/metrics/lantern-interactive.js index de20e19fece7..b4789611d554 100644 --- a/lighthouse-core/gather/computed/metrics/lantern-interactive.js +++ b/lighthouse-core/gather/computed/metrics/lantern-interactive.js @@ -24,9 +24,9 @@ class Interactive extends MetricArtifact { */ get COEFFICIENTS() { return { - intercept: 1600, - optimistic: 0.6, - pessimistic: 0.45, + intercept: 0, + optimistic: 0.5, + pessimistic: 0.5, }; } diff --git a/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js b/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js index c6ccd495d0a9..0ea0480033e8 100644 --- a/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js +++ b/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js @@ -5,12 +5,14 @@ */ 'use strict'; -// A DNS lookup will usually take 1 roundtrip, connection latency plus potentially extra DNS routing +// A DNS lookup will usually take ~1-2 roundtrips of connection latency plus the extra DNS routing time. // Example: https://www.webpagetest.org/result/180703_3A_e33ec79747c002ed4d7bcbfc81462203/1/details/#waterfall_view_step1 -// All DNS lookups are 1-2 RTT times, usually 1-1.5 -const DNS_RESOLUTION_RTT_MULTIPLIER = 1; +// Example: https://www.webpagetest.org/result/180707_1M_89673eb633b5d98386de95dfcf9b33d5/1/details/#waterfall_view_step1 +// DNS is highly variable though, many times it's a little more than 1, but can easily be 4-5x RTT. +// We'll use 2 since it seems to give the most accurate results on average, but this can be tweaked. +const DNS_RESOLUTION_RTT_MULTIPLIER = 2; -module.exports = class DNSCache { +class DNSCache { /** * @param {{rtt: number}} options */ @@ -33,7 +35,7 @@ module.exports = class DNSCache { /** * @param {LH.Artifacts.NetworkRequest} request - * @param {{requestedAt: number, shouldUpdateCache: boolean}} options + * @param {{requestedAt: number, shouldUpdateCache: boolean}=} options * @return {number} */ getTimeUntilResolution(request, options) { @@ -41,7 +43,7 @@ module.exports = class DNSCache { const domain = request.parsedURL.host; const cacheEntry = this._resolvedDomainNames.get(domain); - let timeUntilResolved = this._rtt * DNS_RESOLUTION_RTT_MULTIPLIER; + let timeUntilResolved = this._rtt * DNSCache.RTT_MULTIPLIER; if (cacheEntry) { const timeUntilCachedIsResolved = Math.max(cacheEntry.resolvedAt - requestedAt, 0); timeUntilResolved = Math.min(timeUntilCachedIsResolved, timeUntilResolved); @@ -74,8 +76,8 @@ module.exports = class DNSCache { setResolvedAt(domain, resolvedAt) { this._resolvedDomainNames.set(domain, {resolvedAt}); } - - static get RTT_MULTIPLIER() { - return DNS_RESOLUTION_RTT_MULTIPLIER; - } }; + +DNSCache.RTT_MULTIPLIER = DNS_RESOLUTION_RTT_MULTIPLIER; + +module.exports = DNSCache; diff --git a/lighthouse-core/lib/dependency-graph/simulator/simulator.js b/lighthouse-core/lib/dependency-graph/simulator/simulator.js index 50b9d446579c..8a4c5f4ba6ee 100644 --- a/lighthouse-core/lib/dependency-graph/simulator/simulator.js +++ b/lighthouse-core/lib/dependency-graph/simulator/simulator.js @@ -276,7 +276,7 @@ class Simulator { const connection = /** @type {TcpConnection} */ (this._acquireConnection(record)); const dnsResolutionTime = this._dns.getTimeUntilResolution(record, { requestedAt: timingData.startTime, - shouldUpdateCache: false, + shouldUpdateCache: true, }); const timeAlreadyElapsed = timingData.timeElapsed; const calculation = connection.simulateDownloadUntil( diff --git a/lighthouse-core/test/audits/__snapshots__/load-fast-enough-for-pwa-test.js.snap b/lighthouse-core/test/audits/__snapshots__/load-fast-enough-for-pwa-test.js.snap index 72d622d91e2d..76513e9d6c82 100644 --- a/lighthouse-core/test/audits/__snapshots__/load-fast-enough-for-pwa-test.js.snap +++ b/lighthouse-core/test/audits/__snapshots__/load-fast-enough-for-pwa-test.js.snap @@ -1,3 +1,3 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`PWA: load-fast-enough-for-pwa audit overrides with simulated result when throttling is modified 1`] = `4782`; +exports[`PWA: load-fast-enough-for-pwa audit overrides with simulated result when throttling is modified 1`] = `3427`; diff --git a/lighthouse-core/test/audits/__snapshots__/metrics-test.js.snap b/lighthouse-core/test/audits/__snapshots__/metrics-test.js.snap index 768974e0a671..1628771b1d7e 100644 --- a/lighthouse-core/test/audits/__snapshots__/metrics-test.js.snap +++ b/lighthouse-core/test/audits/__snapshots__/metrics-test.js.snap @@ -4,13 +4,13 @@ exports[`Performance: metrics evaluates valid input correctly 1`] = ` Object { "estimatedInputLatency": 104, "estimatedInputLatencyTs": undefined, - "firstCPUIdle": 4782, + "firstCPUIdle": 3351, "firstCPUIdleTs": undefined, - "firstContentfulPaint": 1293, + "firstContentfulPaint": 911, "firstContentfulPaintTs": undefined, - "firstMeaningfulPaint": 2186, + "firstMeaningfulPaint": 1355, "firstMeaningfulPaintTs": undefined, - "interactive": 4782, + "interactive": 3427, "interactiveTs": undefined, "observedDomContentLoaded": 560, "observedDomContentLoadedTs": 225414732309, @@ -32,7 +32,7 @@ Object { "observedSpeedIndexTs": 225414776724, "observedTraceEnd": 12540, "observedTraceEndTs": 225426711887, - "speedIndex": 1559, + "speedIndex": 1656, "speedIndexTs": undefined, } `; diff --git a/lighthouse-core/test/audits/__snapshots__/predictive-perf-test.js.snap b/lighthouse-core/test/audits/__snapshots__/predictive-perf-test.js.snap index c22891c43e1c..6b830375716f 100644 --- a/lighthouse-core/test/audits/__snapshots__/predictive-perf-test.js.snap +++ b/lighthouse-core/test/audits/__snapshots__/predictive-perf-test.js.snap @@ -2,23 +2,23 @@ exports[`Performance: predictive performance audit should compute the predicted values 1`] = ` Object { - "optimisticEIL": 101.16666666666667, - "optimisticFCP": 760.6100000208243, - "optimisticFMP": 1061.4020000561136, - "optimisticSI": 604.7093900063634, - "optimisticTTFCPUI": 2901.3320000492968, - "optimisticTTI": 2901.3320000492968, - "pessimisticEIL": 157.66666666666666, - "pessimisticFCP": 760.6100000208243, - "pessimisticFMP": 1347.6100000208241, - "pessimisticSI": 1479.9229894831612, - "pessimisticTTFCPUI": 3202.377000061097, - "pessimisticTTI": 3202.377000061097, - "roughEstimateOfEIL": 103.53333333333333, - "roughEstimateOfFCP": 1293.0370000354012, - "roughEstimateOfFMP": 2186.1969000377458, - "roughEstimateOfSI": 1558.5430891729634, - "roughEstimateOfTTFCPUI": 4781.8688500570715, - "roughEstimateOfTTI": 4781.8688500570715, + "optimisticEIL": 101, + "optimisticFCP": 911, + "optimisticFMP": 1211, + "optimisticSI": 605, + "optimisticTTFCPUI": 3351, + "optimisticTTI": 3351, + "pessimisticEIL": 158, + "pessimisticFCP": 911, + "pessimisticFMP": 1498, + "pessimisticSI": 1630, + "pessimisticTTFCPUI": 3502, + "pessimisticTTI": 3502, + "roughEstimateOfEIL": 104, + "roughEstimateOfFCP": 911, + "roughEstimateOfFMP": 1355, + "roughEstimateOfSI": 1656, + "roughEstimateOfTTFCPUI": 3351, + "roughEstimateOfTTI": 3427, } `; diff --git a/lighthouse-core/test/audits/byte-efficiency/__snapshots__/byte-efficiency-audit-test.js.snap b/lighthouse-core/test/audits/byte-efficiency/__snapshots__/byte-efficiency-audit-test.js.snap index 686cdf65a4e1..a4a33dd54b97 100644 --- a/lighthouse-core/test/audits/byte-efficiency/__snapshots__/byte-efficiency-audit-test.js.snap +++ b/lighthouse-core/test/audits/byte-efficiency/__snapshots__/byte-efficiency-audit-test.js.snap @@ -3,10 +3,10 @@ exports[`Byte efficiency base audit should allow overriding of computeWasteWithTTIGraph 1`] = ` Object { "default": 1330, - "justTTI": 800, + "justTTI": 950, } `; exports[`Byte efficiency base audit should create load simulator with the specified settings 1`] = `1330`; -exports[`Byte efficiency base audit should create load simulator with the specified settings 2`] = `22650`; +exports[`Byte efficiency base audit should create load simulator with the specified settings 2`] = `22950`; diff --git a/lighthouse-core/test/audits/metrics/__snapshots__/first-meaningful-paint-test.js.snap b/lighthouse-core/test/audits/metrics/__snapshots__/first-meaningful-paint-test.js.snap index 979dd39013e7..779d6b85fb55 100644 --- a/lighthouse-core/test/audits/metrics/__snapshots__/first-meaningful-paint-test.js.snap +++ b/lighthouse-core/test/audits/metrics/__snapshots__/first-meaningful-paint-test.js.snap @@ -4,9 +4,9 @@ exports[`Performance: first-meaningful-paint audit computes FMP correctly for si Object { "displayValue": Array [ "%10d ms", - 2186.1969000377458, + 1354.506000038469, ], - "rawValue": 2186.1969000377458, - "score": 0.92, + "rawValue": 1354.506000038469, + "score": 1, } `; diff --git a/lighthouse-core/test/audits/predictive-perf-test.js b/lighthouse-core/test/audits/predictive-perf-test.js index 7375377fd63f..3b63dc1d4a9d 100644 --- a/lighthouse-core/test/audits/predictive-perf-test.js +++ b/lighthouse-core/test/audits/predictive-perf-test.js @@ -26,8 +26,8 @@ describe('Performance: predictive performance audit', () => { return PredictivePerf.audit(artifacts).then(output => { const metrics = output.details.items[0]; - for (const [key, value] in Object.entries(metrics)) { - if (Number.isFinite(value)) metrics[key] = Math.round(value); + for (const [key, value] of Object.entries(metrics)) { + metrics[key] = Math.round(value); } expect(metrics).toMatchSnapshot(); diff --git a/lighthouse-core/test/fixtures/lantern-master-computed-values.json b/lighthouse-core/test/fixtures/lantern-master-computed-values.json index c128d855c651..7727a77304ed 100644 --- a/lighthouse-core/test/fixtures/lantern-master-computed-values.json +++ b/lighthouse-core/test/fixtures/lantern-master-computed-values.json @@ -1,103 +1,103 @@ { "sites": [ - {"url": "https://flipkart.com", "roughEstimateOfFCP": 2819, "optimisticFCP": 2017, "pessimisticFCP": 2017, "roughEstimateOfFMP": 6108, "optimisticFMP": 4960, "pessimisticFMP": 4960, "roughEstimateOfTTI": 12534, "optimisticTTI": 9513, "pessimisticTTI": 11613, "roughEstimateOfTTFCPUI": 12534, "optimisticTTFCPUI": 9513, "pessimisticTTFCPUI": 11613, "roughEstimateOfSI": 6223, "optimisticSI": 3687, "pessimisticSI": 2017, "roughEstimateOfEIL": 766, "optimisticEIL": 957, "pessimisticEIL": 957}, - {"url": "https://vine.co/", "roughEstimateOfFCP": 1977, "optimisticFCP": 1251, "pessimisticFCP": 1251, "roughEstimateOfFMP": 3204, "optimisticFMP": 1251, "pessimisticFMP": 2901, "roughEstimateOfTTI": 8901, "optimisticTTI": 6372, "pessimisticTTI": 7727, "roughEstimateOfTTFCPUI": 8901, "optimisticTTFCPUI": 6372, "pessimisticTTFCPUI": 7727, "roughEstimateOfSI": 3707, "optimisticSI": 2246, "pessimisticSI": 1251, "roughEstimateOfEIL": 961, "optimisticEIL": 1202, "pessimisticEIL": 1202}, - {"url": "https://weather.com/", "roughEstimateOfFCP": 5617, "optimisticFCP": 4561, "pessimisticFCP": 4561, "roughEstimateOfFMP": 5689, "optimisticFMP": 4561, "pessimisticFMP": 4561, "roughEstimateOfTTI": 25785, "optimisticTTI": 20854, "pessimisticTTI": 25939, "roughEstimateOfTTFCPUI": 25785, "optimisticTTFCPUI": 20854, "pessimisticTTFCPUI": 25939, "roughEstimateOfSI": 6301, "optimisticSI": 2561, "pessimisticSI": 4561, "roughEstimateOfEIL": 1648, "optimisticEIL": 2060, "pessimisticEIL": 2060}, - {"url": "http://www.4399.com/", "roughEstimateOfFCP": 3554, "optimisticFCP": 2685, "pessimisticFCP": 2685, "roughEstimateOfFMP": 3719, "optimisticFMP": 2685, "pessimisticFMP": 2685, "roughEstimateOfTTI": 5551, "optimisticTTI": 2696, "pessimisticTTI": 5185, "roughEstimateOfTTFCPUI": 5551, "optimisticTTFCPUI": 2696, "pessimisticTTFCPUI": 5185, "roughEstimateOfSI": 3554, "optimisticSI": 350, "pessimisticSI": 2685, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, - {"url": "http://www.4shared.com/", "roughEstimateOfFCP": 4380, "optimisticFCP": 3437, "pessimisticFCP": 3437, "roughEstimateOfFMP": 4509, "optimisticFMP": 3437, "pessimisticFMP": 3437, "roughEstimateOfTTI": 6302, "optimisticTTI": 4192, "pessimisticTTI": 4860, "roughEstimateOfTTFCPUI": 6302, "optimisticTTFCPUI": 4192, "pessimisticTTFCPUI": 4860, "roughEstimateOfSI": 4380, "optimisticSI": 1467, "pessimisticSI": 3437, "roughEstimateOfEIL": 51, "optimisticEIL": 63, "pessimisticEIL": 63}, - {"url": "http://www.56.com/", "roughEstimateOfFCP": 3727, "optimisticFCP": 2843, "pessimisticFCP": 2843, "roughEstimateOfFMP": 3885, "optimisticFMP": 2843, "pessimisticFMP": 2843, "roughEstimateOfTTI": 10645, "optimisticTTI": 3348, "pessimisticTTI": 15637, "roughEstimateOfTTFCPUI": 4476, "optimisticTTFCPUI": 3348, "pessimisticTTFCPUI": 1926, "roughEstimateOfSI": 9882, "optimisticSI": 5917, "pessimisticSI": 2843, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, - {"url": "http://www.58.com/", "roughEstimateOfFCP": 3549, "optimisticFCP": 2681, "pessimisticFCP": 2681, "roughEstimateOfFMP": 3715, "optimisticFMP": 2681, "pessimisticFMP": 2681, "roughEstimateOfTTI": 5599, "optimisticTTI": 3498, "pessimisticTTI": 4224, "roughEstimateOfTTFCPUI": 5599, "optimisticTTFCPUI": 3498, "pessimisticTTFCPUI": 4224, "roughEstimateOfSI": 6875, "optimisticSI": 3844, "pessimisticSI": 2681, "roughEstimateOfEIL": 1356, "optimisticEIL": 1695, "pessimisticEIL": 1695}, - {"url": "http://www.7k7k.com/", "roughEstimateOfFCP": 5546, "optimisticFCP": 4491, "pessimisticFCP": 4502, "roughEstimateOfFMP": 5622, "optimisticFMP": 4491, "pessimisticFMP": 4502, "roughEstimateOfTTI": 9935, "optimisticTTI": 5204, "pessimisticTTI": 11582, "roughEstimateOfTTFCPUI": 5622, "optimisticTTFCPUI": 5204, "pessimisticTTFCPUI": 1880, "roughEstimateOfSI": 9164, "optimisticSI": 4634, "pessimisticSI": 4502, "roughEstimateOfEIL": 1669, "optimisticEIL": 2086, "pessimisticEIL": 2086}, - {"url": "http://www.addthis.com/", "roughEstimateOfFCP": 3175, "optimisticFCP": 2341, "pessimisticFCP": 2341, "roughEstimateOfFMP": 3570, "optimisticFMP": 2543, "pessimisticFMP": 2543, "roughEstimateOfTTI": 10052, "optimisticTTI": 7175, "pessimisticTTI": 9216, "roughEstimateOfTTFCPUI": 10052, "optimisticTTFCPUI": 7175, "pessimisticTTFCPUI": 9216, "roughEstimateOfSI": 3405, "optimisticSI": 1524, "pessimisticSI": 2341, "roughEstimateOfEIL": 167, "optimisticEIL": 209, "pessimisticEIL": 209}, - {"url": "http://www.alexa.com/", "roughEstimateOfFCP": 7118, "optimisticFCP": 5925, "pessimisticFCP": 5925, "roughEstimateOfFMP": 7459, "optimisticFMP": 6247, "pessimisticFMP": 6247, "roughEstimateOfTTI": 15388, "optimisticTTI": 12076, "pessimisticTTI": 14540, "roughEstimateOfTTFCPUI": 15388, "optimisticTTFCPUI": 12076, "pessimisticTTFCPUI": 14540, "roughEstimateOfSI": 7118, "optimisticSI": 2192, "pessimisticSI": 5925, "roughEstimateOfEIL": 502, "optimisticEIL": 628, "pessimisticEIL": 628}, - {"url": "http://www.amazon.co.jp/", "roughEstimateOfFCP": 3305, "optimisticFCP": 2459, "pessimisticFCP": 2459, "roughEstimateOfFMP": 3607, "optimisticFMP": 2459, "pessimisticFMP": 2668, "roughEstimateOfTTI": 9030, "optimisticTTI": 5621, "pessimisticTTI": 9018, "roughEstimateOfTTFCPUI": 9030, "optimisticTTFCPUI": 5621, "pessimisticTTFCPUI": 9018, "roughEstimateOfSI": 4401, "optimisticSI": 2181, "pessimisticSI": 2459, "roughEstimateOfEIL": 262, "optimisticEIL": 328, "pessimisticEIL": 328}, - {"url": "http://www.att.com/", "roughEstimateOfFCP": 5409, "optimisticFCP": 3634, "pessimisticFCP": 5258, "roughEstimateOfFMP": 7094, "optimisticFMP": 4418, "pessimisticFMP": 7011, "roughEstimateOfTTI": 32310, "optimisticTTI": 26030, "pessimisticTTI": 33538, "roughEstimateOfTTFCPUI": 23710, "optimisticTTFCPUI": 26030, "pessimisticTTFCPUI": 14426, "roughEstimateOfSI": 15781, "optimisticSI": 9009, "pessimisticSI": 5258, "roughEstimateOfEIL": 1542, "optimisticEIL": 1928, "pessimisticEIL": 1928}, - {"url": "http://www.bing.com/", "roughEstimateOfFCP": 769, "optimisticFCP": 452, "pessimisticFCP": 452, "roughEstimateOfFMP": 1539, "optimisticFMP": 603, "pessimisticFMP": 1207, "roughEstimateOfTTI": 7574, "optimisticTTI": 3879, "pessimisticTTI": 8104, "roughEstimateOfTTFCPUI": 7574, "optimisticTTFCPUI": 3879, "pessimisticTTFCPUI": 8104, "roughEstimateOfSI": 2020, "optimisticSI": 1412, "pessimisticSI": 452, "roughEstimateOfEIL": 558, "optimisticEIL": 698, "pessimisticEIL": 698}, - {"url": "http://www.blogspot.com/", "roughEstimateOfFCP": 2815, "optimisticFCP": 2013, "pessimisticFCP": 2013, "roughEstimateOfFMP": 3014, "optimisticFMP": 2013, "pessimisticFMP": 2013, "roughEstimateOfTTI": 4407, "optimisticTTI": 2594, "pessimisticTTI": 2780, "roughEstimateOfTTFCPUI": 4407, "optimisticTTFCPUI": 2594, "pessimisticTTFCPUI": 2780, "roughEstimateOfSI": 11239, "optimisticSI": 7272, "pessimisticSI": 2013, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, - {"url": "http://www.brothersoft.com/", "roughEstimateOfFCP": 2481, "optimisticFCP": 1710, "pessimisticFCP": 1710, "roughEstimateOfFMP": 3365, "optimisticFMP": 2208, "pessimisticFMP": 2452, "roughEstimateOfTTI": 16936, "optimisticTTI": 12900, "pessimisticTTI": 16881, "roughEstimateOfTTFCPUI": 16936, "optimisticTTFCPUI": 12900, "pessimisticTTFCPUI": 16881, "roughEstimateOfSI": 4084, "optimisticSI": 2302, "pessimisticSI": 1710, "roughEstimateOfEIL": 636, "optimisticEIL": 795, "pessimisticEIL": 795}, - {"url": "http://www.china.com.cn/", "roughEstimateOfFCP": 5034, "optimisticFCP": 3589, "pessimisticFCP": 4562, "roughEstimateOfFMP": 5252, "optimisticFMP": 3589, "pessimisticFMP": 4562, "roughEstimateOfTTI": 7914, "optimisticTTI": 4173, "pessimisticTTI": 8466, "roughEstimateOfTTFCPUI": 5252, "optimisticTTFCPUI": 4173, "pessimisticTTFCPUI": 2407, "roughEstimateOfSI": 8102, "optimisticSI": 3848, "pessimisticSI": 4562, "roughEstimateOfEIL": 20, "optimisticEIL": 25, "pessimisticEIL": 25}, - {"url": "http://www.cnet.com/", "roughEstimateOfFCP": 2393, "optimisticFCP": 1451, "pessimisticFCP": 1845, "roughEstimateOfFMP": 2929, "optimisticFMP": 1451, "pessimisticFMP": 2294, "roughEstimateOfTTI": 24938, "optimisticTTI": 18538, "pessimisticTTI": 27145, "roughEstimateOfTTFCPUI": 24938, "optimisticTTFCPUI": 18538, "pessimisticTTFCPUI": 27145, "roughEstimateOfSI": 4292, "optimisticSI": 2388, "pessimisticSI": 1845, "roughEstimateOfEIL": 1061, "optimisticEIL": 1326, "pessimisticEIL": 1326}, - {"url": "http://www.cntv.cn/", "roughEstimateOfFCP": 3567, "optimisticFCP": 2697, "pessimisticFCP": 2697, "roughEstimateOfFMP": 3732, "optimisticFMP": 2697, "pessimisticFMP": 2697, "roughEstimateOfTTI": 4567, "optimisticTTI": 2697, "pessimisticTTI": 2997, "roughEstimateOfTTFCPUI": 4567, "optimisticTTFCPUI": 2697, "pessimisticTTFCPUI": 2997, "roughEstimateOfSI": 3890, "optimisticSI": 1705, "pessimisticSI": 2697, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, - {"url": "http://www.conduit.com/", "roughEstimateOfFCP": 2258, "optimisticFCP": 1507, "pessimisticFCP": 1507, "roughEstimateOfFMP": 2483, "optimisticFMP": 1507, "pessimisticFMP": 1507, "roughEstimateOfTTI": 3884, "optimisticTTI": 1960, "pessimisticTTI": 2463, "roughEstimateOfTTFCPUI": 3884, "optimisticTTFCPUI": 1960, "pessimisticTTFCPUI": 2463, "roughEstimateOfSI": 2539, "optimisticSI": 1292, "pessimisticSI": 1507, "roughEstimateOfEIL": 20, "optimisticEIL": 25, "pessimisticEIL": 25}, - {"url": "http://www.craigslist.org/", "roughEstimateOfFCP": 3615, "optimisticFCP": 2634, "pessimisticFCP": 2869, "roughEstimateOfFMP": 5456, "optimisticFMP": 4201, "pessimisticFMP": 4443, "roughEstimateOfTTI": 6120, "optimisticTTI": 4201, "pessimisticTTI": 4443, "roughEstimateOfTTFCPUI": 6120, "optimisticTTFCPUI": 4201, "pessimisticTTFCPUI": 4443, "roughEstimateOfSI": 3615, "optimisticSI": 1334, "pessimisticSI": 2869, "roughEstimateOfEIL": 182, "optimisticEIL": 227, "pessimisticEIL": 227}, - {"url": "http://www.dawn.com/", "roughEstimateOfFCP": 3859, "optimisticFCP": 2695, "pessimisticFCP": 3283, "roughEstimateOfFMP": 4083, "optimisticFMP": 2695, "pessimisticFMP": 3283, "roughEstimateOfTTI": 16165, "optimisticTTI": 12156, "pessimisticTTI": 16158, "roughEstimateOfTTFCPUI": 16165, "optimisticTTFCPUI": 12156, "pessimisticTTFCPUI": 16158, "roughEstimateOfSI": 5025, "optimisticSI": 2243, "pessimisticSI": 3283, "roughEstimateOfEIL": 298, "optimisticEIL": 373, "pessimisticEIL": 373}, - {"url": "http://www.depositfiles.com/", "roughEstimateOfFCP": 8891, "optimisticFCP": 7537, "pessimisticFCP": 7537, "roughEstimateOfFMP": 8891, "optimisticFMP": 7537, "pessimisticFMP": 7537, "roughEstimateOfTTI": 10999, "optimisticTTI": 8951, "pessimisticTTI": 8951, "roughEstimateOfTTFCPUI": 8891, "optimisticTTFCPUI": 775, "pessimisticTTFCPUI": 8951, "roughEstimateOfSI": 12654, "optimisticSI": 5718, "pessimisticSI": 7537, "roughEstimateOfEIL": 273, "optimisticEIL": 341, "pessimisticEIL": 341}, - {"url": "http://www.deviantart.com/", "roughEstimateOfFCP": 4693, "optimisticFCP": 3721, "pessimisticFCP": 3721, "roughEstimateOfFMP": 6268, "optimisticFMP": 5112, "pessimisticFMP": 5112, "roughEstimateOfTTI": 32184, "optimisticTTI": 18527, "pessimisticTTI": 43261, "roughEstimateOfTTFCPUI": 17915, "optimisticTTFCPUI": 18527, "pessimisticTTFCPUI": 11553, "roughEstimateOfSI": 5681, "optimisticSI": 2509, "pessimisticSI": 3721, "roughEstimateOfEIL": 624, "optimisticEIL": 780, "pessimisticEIL": 780}, - {"url": "http://www.dion.ne.jp/", "roughEstimateOfFCP": 8474, "optimisticFCP": 4680, "pessimisticFCP": 10133, "roughEstimateOfFMP": 9086, "optimisticFMP": 4680, "pessimisticFMP": 10133, "roughEstimateOfTTI": 34618, "optimisticTTI": 14284, "pessimisticTTI": 54327, "roughEstimateOfTTFCPUI": 20669, "optimisticTTFCPUI": 14284, "pessimisticTTFCPUI": 23330, "roughEstimateOfSI": 17627, "optimisticSI": 8065, "pessimisticSI": 10133, "roughEstimateOfEIL": 1028, "optimisticEIL": 1285, "pessimisticEIL": 1285}, - {"url": "http://www.domaintools.com/", "roughEstimateOfFCP": 1837, "optimisticFCP": 1125, "pessimisticFCP": 1125, "roughEstimateOfFMP": 3227, "optimisticFMP": 1995, "pessimisticFMP": 2383, "roughEstimateOfTTI": 9578, "optimisticTTI": 7177, "pessimisticTTI": 8159, "roughEstimateOfTTFCPUI": 9578, "optimisticTTFCPUI": 7177, "pessimisticTTFCPUI": 8159, "roughEstimateOfSI": 9196, "optimisticSI": 6225, "pessimisticSI": 1125, "roughEstimateOfEIL": 1346, "optimisticEIL": 1682, "pessimisticEIL": 1682}, - {"url": "http://www.douban.com/", "roughEstimateOfFCP": 7125, "optimisticFCP": 5932, "pessimisticFCP": 5932, "roughEstimateOfFMP": 7129, "optimisticFMP": 5932, "pessimisticFMP": 5932, "roughEstimateOfTTI": 9324, "optimisticTTI": 7076, "pessimisticTTI": 7729, "roughEstimateOfTTFCPUI": 9324, "optimisticTTFCPUI": 7076, "pessimisticTTFCPUI": 7729, "roughEstimateOfSI": 9975, "optimisticSI": 4549, "pessimisticSI": 5932, "roughEstimateOfEIL": 558, "optimisticEIL": 697, "pessimisticEIL": 697}, - {"url": "http://www.ebay.com/", "roughEstimateOfFCP": 2893, "optimisticFCP": 2085, "pessimisticFCP": 2085, "roughEstimateOfFMP": 3089, "optimisticFMP": 2085, "pessimisticFMP": 2085, "roughEstimateOfTTI": 8923, "optimisticTTI": 6143, "pessimisticTTI": 8083, "roughEstimateOfTTFCPUI": 8923, "optimisticTTFCPUI": 6143, "pessimisticTTFCPUI": 8083, "roughEstimateOfSI": 3728, "optimisticSI": 1873, "pessimisticSI": 2085, "roughEstimateOfEIL": 187, "optimisticEIL": 233, "pessimisticEIL": 233}, - {"url": "https://www.ebs.in/IPS/", "roughEstimateOfFCP": 6659, "optimisticFCP": 3785, "pessimisticFCP": 7576, "roughEstimateOfFMP": 7545, "optimisticFMP": 4161, "pessimisticFMP": 7955, "roughEstimateOfTTI": 21766, "optimisticTTI": 6860, "pessimisticTTI": 35667, "roughEstimateOfTTFCPUI": 7561, "optimisticTTFCPUI": 6860, "pessimisticTTFCPUI": 4100, "roughEstimateOfSI": 10123, "optimisticSI": 3892, "pessimisticSI": 7576, "roughEstimateOfEIL": 298, "optimisticEIL": 373, "pessimisticEIL": 373}, - {"url": "http://www.espn.com/", "roughEstimateOfFCP": 2917, "optimisticFCP": 2106, "pessimisticFCP": 2106, "roughEstimateOfFMP": 4068, "optimisticFMP": 2106, "pessimisticFMP": 3700, "roughEstimateOfTTI": 24187, "optimisticTTI": 19439, "pessimisticTTI": 24275, "roughEstimateOfTTFCPUI": 23459, "optimisticTTFCPUI": 19439, "pessimisticTTFCPUI": 22656, "roughEstimateOfSI": 3785, "optimisticSI": 1904, "pessimisticSI": 2106, "roughEstimateOfEIL": 1316, "optimisticEIL": 1645, "pessimisticEIL": 1645}, - {"url": "http://www.facebook.com/", "roughEstimateOfFCP": 3443, "optimisticFCP": 2585, "pessimisticFCP": 2585, "roughEstimateOfFMP": 3614, "optimisticFMP": 2585, "pessimisticFMP": 2585, "roughEstimateOfTTI": 5666, "optimisticTTI": 3421, "pessimisticTTI": 4474, "roughEstimateOfTTFCPUI": 5666, "optimisticTTFCPUI": 3421, "pessimisticTTFCPUI": 4474, "roughEstimateOfSI": 3669, "optimisticSI": 1599, "pessimisticSI": 2585, "roughEstimateOfEIL": 65, "optimisticEIL": 82, "pessimisticEIL": 82}, - {"url": "http://www.fc2.com/", "roughEstimateOfFCP": 3066, "optimisticFCP": 2242, "pessimisticFCP": 2242, "roughEstimateOfFMP": 3254, "optimisticFMP": 2242, "pessimisticFMP": 2242, "roughEstimateOfTTI": 4251, "optimisticTTI": 2440, "pessimisticTTI": 2638, "roughEstimateOfTTFCPUI": 4251, "optimisticTTFCPUI": 2440, "pessimisticTTFCPUI": 2638, "roughEstimateOfSI": 3231, "optimisticSI": 1446, "pessimisticSI": 2242, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, - {"url": "http://www.filestube.com/", "roughEstimateOfFCP": 9184, "optimisticFCP": 7803, "pessimisticFCP": 7803, "roughEstimateOfFMP": 11107, "optimisticFMP": 9264, "pessimisticFMP": 10063, "roughEstimateOfTTI": 25406, "optimisticTTI": 16639, "pessimisticTTI": 30716, "roughEstimateOfTTFCPUI": 18010, "optimisticTTFCPUI": 16639, "pessimisticTTFCPUI": 14282, "roughEstimateOfSI": 11939, "optimisticSI": 5083, "pessimisticSI": 7803, "roughEstimateOfEIL": 1198, "optimisticEIL": 1497, "pessimisticEIL": 1497}, - {"url": "http://www.foxnews.com/", "roughEstimateOfFCP": 3447, "optimisticFCP": 2588, "pessimisticFCP": 2588, "roughEstimateOfFMP": 3617, "optimisticFMP": 2588, "pessimisticFMP": 2588, "roughEstimateOfTTI": 30430, "optimisticTTI": 20477, "pessimisticTTI": 36765, "roughEstimateOfTTFCPUI": 28544, "optimisticTTFCPUI": 20477, "pessimisticTTFCPUI": 32572, "roughEstimateOfSI": 11115, "optimisticSI": 6916, "pessimisticSI": 2588, "roughEstimateOfEIL": 1306, "optimisticEIL": 1632, "pessimisticEIL": 1632}, - {"url": "http://www.getpersonas.com/", "roughEstimateOfFCP": 4265, "optimisticFCP": 3321, "pessimisticFCP": 3344, "roughEstimateOfFMP": 6777, "optimisticFMP": 5597, "pessimisticFMP": 5597, "roughEstimateOfTTI": 12397, "optimisticTTI": 9001, "pessimisticTTI": 11991, "roughEstimateOfTTFCPUI": 12397, "optimisticTTFCPUI": 9001, "pessimisticTTFCPUI": 11991, "roughEstimateOfSI": 4265, "optimisticSI": 1509, "pessimisticSI": 3344, "roughEstimateOfEIL": 1510, "optimisticEIL": 1888, "pessimisticEIL": 1888}, - {"url": "http://www.globo.com/", "roughEstimateOfFCP": 3558, "optimisticFCP": 2689, "pessimisticFCP": 2689, "roughEstimateOfFMP": 4217, "optimisticFMP": 2957, "pessimisticFMP": 3310, "roughEstimateOfTTI": 20958, "optimisticTTI": 15884, "pessimisticTTI": 21839, "roughEstimateOfTTFCPUI": 20958, "optimisticTTFCPUI": 15884, "pessimisticTTFCPUI": 21839, "roughEstimateOfSI": 4469, "optimisticSI": 2122, "pessimisticSI": 2689, "roughEstimateOfEIL": 2070, "optimisticEIL": 2588, "pessimisticEIL": 2588}, - {"url": "http://www.gmx.net/", "roughEstimateOfFCP": 2291, "optimisticFCP": 1537, "pessimisticFCP": 1537, "roughEstimateOfFMP": 2514, "optimisticFMP": 1537, "pessimisticFMP": 1537, "roughEstimateOfTTI": 9616, "optimisticTTI": 6627, "pessimisticTTI": 8978, "roughEstimateOfTTFCPUI": 9616, "optimisticTTFCPUI": 6627, "pessimisticTTFCPUI": 8978, "roughEstimateOfSI": 4970, "optimisticSI": 3015, "pessimisticSI": 1537, "roughEstimateOfEIL": 453, "optimisticEIL": 566, "pessimisticEIL": 566}, - {"url": "http://www.hatena.ne.jp/", "roughEstimateOfFCP": 1853, "optimisticFCP": 1025, "pessimisticFCP": 1276, "roughEstimateOfFMP": 2200, "optimisticFMP": 1188, "pessimisticFMP": 1276, "roughEstimateOfTTI": 22065, "optimisticTTI": 10950, "pessimisticTTI": 30878, "roughEstimateOfTTFCPUI": 14902, "optimisticTTFCPUI": 10950, "pessimisticTTFCPUI": 14960, "roughEstimateOfSI": 4530, "optimisticSI": 2821, "pessimisticSI": 1276, "roughEstimateOfEIL": 194, "optimisticEIL": 242, "pessimisticEIL": 242}, - {"url": "http://www.hexun.com/", "roughEstimateOfFCP": 4206, "optimisticFCP": 3278, "pessimisticFCP": 3278, "roughEstimateOfFMP": 5261, "optimisticFMP": 3278, "pessimisticFMP": 4809, "roughEstimateOfTTI": 8877, "optimisticTTI": 5514, "pessimisticTTI": 8820, "roughEstimateOfTTFCPUI": 8877, "optimisticTTFCPUI": 5514, "pessimisticTTFCPUI": 8820, "roughEstimateOfSI": 12760, "optimisticSI": 7771, "pessimisticSI": 3278, "roughEstimateOfEIL": 64, "optimisticEIL": 71, "pessimisticEIL": 88}, - {"url": "http://www.hotfile.com/", "roughEstimateOfFCP": 4943, "optimisticFCP": 3376, "pessimisticFCP": 4634, "roughEstimateOfFMP": 5200, "optimisticFMP": 3376, "pessimisticFMP": 4634, "roughEstimateOfTTI": 9928, "optimisticTTI": 5310, "pessimisticTTI": 11426, "roughEstimateOfTTFCPUI": 9928, "optimisticTTFCPUI": 5310, "pessimisticTTFCPUI": 11426, "roughEstimateOfSI": 9493, "optimisticSI": 4807, "pessimisticSI": 4634, "roughEstimateOfEIL": 100, "optimisticEIL": 126, "pessimisticEIL": 125}, - {"url": "http://www.hp.com/", "roughEstimateOfFCP": 8474, "optimisticFCP": 5962, "pessimisticFCP": 8594, "roughEstimateOfFMP": 9882, "optimisticFMP": 7293, "pessimisticFMP": 9499, "roughEstimateOfTTI": 17501, "optimisticTTI": 13912, "pessimisticTTI": 16785, "roughEstimateOfTTFCPUI": 17501, "optimisticTTFCPUI": 13912, "pessimisticTTFCPUI": 16785, "roughEstimateOfSI": 8693, "optimisticSI": 2398, "pessimisticSI": 8594, "roughEstimateOfEIL": 414, "optimisticEIL": 517, "pessimisticEIL": 517}, - {"url": "http://www.huffingtonpost.com/", "roughEstimateOfFCP": 3291, "optimisticFCP": 2446, "pessimisticFCP": 2446, "roughEstimateOfFMP": 3468, "optimisticFMP": 2446, "pessimisticFMP": 2446, "roughEstimateOfTTI": 20378, "optimisticTTI": 15398, "pessimisticTTI": 21198, "roughEstimateOfTTFCPUI": 20378, "optimisticTTFCPUI": 15398, "pessimisticTTFCPUI": 21198, "roughEstimateOfSI": 4104, "optimisticSI": 1974, "pessimisticSI": 2446, "roughEstimateOfEIL": 373, "optimisticEIL": 466, "pessimisticEIL": 466}, - {"url": "http://www.hulu.com/", "roughEstimateOfFCP": 13069, "optimisticFCP": 9026, "pessimisticFCP": 14108, "roughEstimateOfFMP": 15811, "optimisticFMP": 9805, "pessimisticFMP": 17498, "roughEstimateOfTTI": 25034, "optimisticTTI": 19714, "pessimisticTTI": 25790, "roughEstimateOfTTFCPUI": 25034, "optimisticTTFCPUI": 19714, "pessimisticTTFCPUI": 25790, "roughEstimateOfSI": 14682, "optimisticSI": 4115, "pessimisticSI": 14108, "roughEstimateOfEIL": 1468, "optimisticEIL": 1835, "pessimisticEIL": 1835}, - {"url": "http://www.iciba.com/", "roughEstimateOfFCP": 1436, "optimisticFCP": 845, "pessimisticFCP": 845, "roughEstimateOfFMP": 1647, "optimisticFMP": 845, "pessimisticFMP": 845, "roughEstimateOfTTI": 4294, "optimisticTTI": 2130, "pessimisticTTI": 3146, "roughEstimateOfTTFCPUI": 4294, "optimisticTTFCPUI": 2130, "pessimisticTTFCPUI": 3146, "roughEstimateOfSI": 4622, "optimisticSI": 3088, "pessimisticSI": 845, "roughEstimateOfEIL": 394, "optimisticEIL": 492, "pessimisticEIL": 492}, - {"url": "http://www.ifeng.com/", "roughEstimateOfFCP": 3827, "optimisticFCP": 2934, "pessimisticFCP": 2934, "roughEstimateOfFMP": 3980, "optimisticFMP": 2934, "pessimisticFMP": 2934, "roughEstimateOfTTI": 6299, "optimisticTTI": 2934, "pessimisticTTI": 6530, "roughEstimateOfTTFCPUI": 6275, "optimisticTTFCPUI": 2894, "pessimisticTTFCPUI": 6530, "roughEstimateOfSI": 3827, "optimisticSI": 879, "pessimisticSI": 2934, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, - {"url": "http://www.imageshack.us/", "roughEstimateOfFCP": 7728, "optimisticFCP": 6409, "pessimisticFCP": 6565, "roughEstimateOfFMP": 7728, "optimisticFMP": 6409, "pessimisticFMP": 6565, "roughEstimateOfTTI": 10364, "optimisticTTI": 8218, "pessimisticTTI": 8520, "roughEstimateOfTTFCPUI": 10364, "optimisticTTFCPUI": 8218, "pessimisticTTFCPUI": 8520, "roughEstimateOfSI": 7728, "optimisticSI": 1817, "pessimisticSI": 6565, "roughEstimateOfEIL": 1491, "optimisticEIL": 1864, "pessimisticEIL": 1864}, - {"url": "http://www.irs.gov/", "roughEstimateOfFCP": 3303, "optimisticFCP": 2457, "pessimisticFCP": 2457, "roughEstimateOfFMP": 4559, "optimisticFMP": 3257, "pessimisticFMP": 3656, "roughEstimateOfTTI": 13260, "optimisticTTI": 9497, "pessimisticTTI": 13248, "roughEstimateOfTTFCPUI": 13260, "optimisticTTFCPUI": 9497, "pessimisticTTFCPUI": 13248, "roughEstimateOfSI": 3364, "optimisticSI": 1440, "pessimisticSI": 2457, "roughEstimateOfEIL": 225, "optimisticEIL": 281, "pessimisticEIL": 281}, - {"url": "http://www.java.com/", "roughEstimateOfFCP": 1646, "optimisticFCP": 968, "pessimisticFCP": 968, "roughEstimateOfFMP": 1888, "optimisticFMP": 968, "pessimisticFMP": 968, "roughEstimateOfTTI": 4262, "optimisticTTI": 2210, "pessimisticTTI": 2968, "roughEstimateOfTTFCPUI": 4262, "optimisticTTFCPUI": 2210, "pessimisticTTFCPUI": 2968, "roughEstimateOfSI": 2177, "optimisticSI": 1284, "pessimisticSI": 968, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, - {"url": "http://www.linkedin.com/", "roughEstimateOfFCP": 5024, "optimisticFCP": 4021, "pessimisticFCP": 4021, "roughEstimateOfFMP": 5123, "optimisticFMP": 4021, "pessimisticFMP": 4021, "roughEstimateOfTTI": 6240, "optimisticTTI": 4323, "pessimisticTTI": 4547, "roughEstimateOfTTFCPUI": 6240, "optimisticTTFCPUI": 4323, "pessimisticTTFCPUI": 4547, "roughEstimateOfSI": 5024, "optimisticSI": 1074, "pessimisticSI": 4021, "roughEstimateOfEIL": 1598, "optimisticEIL": 1998, "pessimisticEIL": 1998}, - {"url": "http://www.livedoor.jp/", "roughEstimateOfFCP": 3333, "optimisticFCP": 2484, "pessimisticFCP": 2484, "roughEstimateOfFMP": 3509, "optimisticFMP": 2484, "pessimisticFMP": 2484, "roughEstimateOfTTI": 16561, "optimisticTTI": 10406, "pessimisticTTI": 19372, "roughEstimateOfTTFCPUI": 14360, "optimisticTTFCPUI": 10406, "pessimisticTTFCPUI": 14480, "roughEstimateOfSI": 7328, "optimisticSI": 4260, "pessimisticSI": 2484, "roughEstimateOfEIL": 221, "optimisticEIL": 276, "pessimisticEIL": 276}, - {"url": "http://www.liveperson.net/", "roughEstimateOfFCP": 11748, "optimisticFCP": 10045, "pessimisticFCP": 10241, "roughEstimateOfFMP": 12183, "optimisticFMP": 10634, "pessimisticFMP": 10830, "roughEstimateOfTTI": 34702, "optimisticTTI": 18360, "pessimisticTTI": 49081, "roughEstimateOfTTFCPUI": 13195, "optimisticTTFCPUI": 8512, "pessimisticTTFCPUI": 14417, "roughEstimateOfSI": 11748, "optimisticSI": 2248, "pessimisticSI": 10241, "roughEstimateOfEIL": 354, "optimisticEIL": 442, "pessimisticEIL": 442}, - {"url": "http://www.mail.ru/", "roughEstimateOfFCP": 5275, "optimisticFCP": 4250, "pessimisticFCP": 4250, "roughEstimateOfFMP": 5363, "optimisticFMP": 4250, "pessimisticFMP": 4250, "roughEstimateOfTTI": 11830, "optimisticTTI": 8391, "pessimisticTTI": 11546, "roughEstimateOfTTFCPUI": 11830, "optimisticTTFCPUI": 8391, "pessimisticTTFCPUI": 11546, "roughEstimateOfSI": 7902, "optimisticSI": 3849, "pessimisticSI": 4250, "roughEstimateOfEIL": 48, "optimisticEIL": 60, "pessimisticEIL": 60}, - {"url": "http://www.maktoob.com/", "roughEstimateOfFCP": 3986, "optimisticFCP": 3078, "pessimisticFCP": 3078, "roughEstimateOfFMP": 4132, "optimisticFMP": 3078, "pessimisticFMP": 3078, "roughEstimateOfTTI": 12242, "optimisticTTI": 9682, "pessimisticTTI": 10739, "roughEstimateOfTTFCPUI": 12242, "optimisticTTFCPUI": 9682, "pessimisticTTFCPUI": 10739, "roughEstimateOfSI": 4716, "optimisticSI": 2118, "pessimisticSI": 3078, "roughEstimateOfEIL": 265, "optimisticEIL": 332, "pessimisticEIL": 332}, - {"url": "http://www.marketgid.com/", "roughEstimateOfFCP": 3848, "optimisticFCP": 2952, "pessimisticFCP": 2952, "roughEstimateOfFMP": 6657, "optimisticFMP": 5483, "pessimisticFMP": 5483, "roughEstimateOfTTI": 9770, "optimisticTTI": 7073, "pessimisticTTI": 8723, "roughEstimateOfTTFCPUI": 9770, "optimisticTTFCPUI": 7073, "pessimisticTTFCPUI": 8723, "roughEstimateOfSI": 4795, "optimisticSI": 2233, "pessimisticSI": 2952, "roughEstimateOfEIL": 226, "optimisticEIL": 283, "pessimisticEIL": 283}, - {"url": "http://www.metacafe.com/", "roughEstimateOfFCP": 1973, "optimisticFCP": 1248, "pessimisticFCP": 1248, "roughEstimateOfFMP": 2213, "optimisticFMP": 1250, "pessimisticFMP": 1250, "roughEstimateOfTTI": 16192, "optimisticTTI": 12260, "pessimisticTTI": 16080, "roughEstimateOfTTFCPUI": 16192, "optimisticTTFCPUI": 12260, "pessimisticTTFCPUI": 16080, "roughEstimateOfSI": 2512, "optimisticSI": 1393, "pessimisticSI": 1248, "roughEstimateOfEIL": 361, "optimisticEIL": 451, "pessimisticEIL": 451}, - {"url": "http://www.metrolyrics.com/", "roughEstimateOfFCP": 3401, "optimisticFCP": 2456, "pessimisticFCP": 2654, "roughEstimateOfFMP": 3598, "optimisticFMP": 2456, "pessimisticFMP": 2654, "roughEstimateOfTTI": 54705, "optimisticTTI": 37954, "pessimisticTTI": 67406, "roughEstimateOfTTFCPUI": 28494, "optimisticTTFCPUI": 37954, "pessimisticTTFCPUI": 9160, "roughEstimateOfSI": 14965, "optimisticSI": 9636, "pessimisticSI": 2654, "roughEstimateOfEIL": 1134, "optimisticEIL": 1417, "pessimisticEIL": 1417}, - {"url": "http://www.mlb.com/", "roughEstimateOfFCP": 3235, "optimisticFCP": 2124, "pessimisticFCP": 2722, "roughEstimateOfFMP": 3489, "optimisticFMP": 2124, "pessimisticFMP": 2722, "roughEstimateOfTTI": 31734, "optimisticTTI": 25537, "pessimisticTTI": 32914, "roughEstimateOfTTFCPUI": 20685, "optimisticTTFCPUI": 25537, "pessimisticTTFCPUI": 8361, "roughEstimateOfSI": 7242, "optimisticSI": 4088, "pessimisticSI": 2722, "roughEstimateOfEIL": 761, "optimisticEIL": 951, "pessimisticEIL": 951}, - {"url": "http://www.mop.com/", "roughEstimateOfFCP": 7496, "optimisticFCP": 5780, "pessimisticFCP": 6856, "roughEstimateOfFMP": 7614, "optimisticFMP": 5780, "pessimisticFMP": 6856, "roughEstimateOfTTI": 20885, "optimisticTTI": 9659, "pessimisticTTI": 29977, "roughEstimateOfTTFCPUI": 8565, "optimisticTTFCPUI": 9659, "pessimisticTTFCPUI": 2599, "roughEstimateOfSI": 9814, "optimisticSI": 4006, "pessimisticSI": 6856, "roughEstimateOfEIL": 828, "optimisticEIL": 1035, "pessimisticEIL": 1035}, - {"url": "http://www.mozilla.org/", "roughEstimateOfFCP": 2556, "optimisticFCP": 1455, "pessimisticFCP": 2166, "roughEstimateOfFMP": 3307, "optimisticFMP": 1455, "pessimisticFMP": 2919, "roughEstimateOfTTI": 6322, "optimisticTTI": 3850, "pessimisticTTI": 5361, "roughEstimateOfTTFCPUI": 6322, "optimisticTTFCPUI": 3850, "pessimisticTTFCPUI": 5361, "roughEstimateOfSI": 2798, "optimisticSI": 1172, "pessimisticSI": 2166, "roughEstimateOfEIL": 842, "optimisticEIL": 1053, "pessimisticEIL": 1053}, - {"url": "http://www.msn.com/", "roughEstimateOfFCP": 2651, "optimisticFCP": 1865, "pessimisticFCP": 1865, "roughEstimateOfFMP": 2976, "optimisticFMP": 1865, "pessimisticFMP": 2061, "roughEstimateOfTTI": 11598, "optimisticTTI": 8171, "pessimisticTTI": 11324, "roughEstimateOfTTFCPUI": 11598, "optimisticTTFCPUI": 8171, "pessimisticTTFCPUI": 11324, "roughEstimateOfSI": 3691, "optimisticSI": 1949, "pessimisticSI": 1865, "roughEstimateOfEIL": 313, "optimisticEIL": 391, "pessimisticEIL": 391}, - {"url": "http://www.netflix.com/", "roughEstimateOfFCP": 2695, "optimisticFCP": 1904, "pessimisticFCP": 1904, "roughEstimateOfFMP": 2899, "optimisticFMP": 1904, "pessimisticFMP": 1904, "roughEstimateOfTTI": 6407, "optimisticTTI": 4163, "pessimisticTTI": 5131, "roughEstimateOfTTFCPUI": 6407, "optimisticTTFCPUI": 4163, "pessimisticTTFCPUI": 5131, "roughEstimateOfSI": 2966, "optimisticSI": 1413, "pessimisticSI": 1904, "roughEstimateOfEIL": 393, "optimisticEIL": 491, "pessimisticEIL": 491}, - {"url": "http://www.nih.gov/", "roughEstimateOfFCP": 5054, "optimisticFCP": 3606, "pessimisticFCP": 4582, "roughEstimateOfFMP": 5272, "optimisticFMP": 3606, "pessimisticFMP": 4582, "roughEstimateOfTTI": 9227, "optimisticTTI": 5225, "pessimisticTTI": 9981, "roughEstimateOfTTFCPUI": 9227, "optimisticTTFCPUI": 5225, "pessimisticTTFCPUI": 9981, "roughEstimateOfSI": 6657, "optimisticSI": 2807, "pessimisticSI": 4582, "roughEstimateOfEIL": 106, "optimisticEIL": 116, "pessimisticEIL": 148}, - {"url": "http://www.ning.com/", "roughEstimateOfFCP": 2922, "optimisticFCP": 2111, "pessimisticFCP": 2111, "roughEstimateOfFMP": 3424, "optimisticFMP": 2404, "pessimisticFMP": 2404, "roughEstimateOfTTI": 15624, "optimisticTTI": 10628, "pessimisticTTI": 16995, "roughEstimateOfTTFCPUI": 15624, "optimisticTTFCPUI": 10628, "pessimisticTTFCPUI": 16995, "roughEstimateOfSI": 3403, "optimisticSI": 1629, "pessimisticSI": 2111, "roughEstimateOfEIL": 253, "optimisticEIL": 316, "pessimisticEIL": 316}, - {"url": "http://www.nokia.com/", "roughEstimateOfFCP": 6305, "optimisticFCP": 5186, "pessimisticFCP": 5186, "roughEstimateOfFMP": 6346, "optimisticFMP": 5186, "pessimisticFMP": 5186, "roughEstimateOfTTI": 14376, "optimisticTTI": 9886, "pessimisticTTI": 15209, "roughEstimateOfTTFCPUI": 14376, "optimisticTTFCPUI": 9886, "pessimisticTTFCPUI": 15209, "roughEstimateOfSI": 6305, "optimisticSI": 2069, "pessimisticSI": 5186, "roughEstimateOfEIL": 211, "optimisticEIL": 264, "pessimisticEIL": 264}, - {"url": "http://www.ocn.ne.jp/", "roughEstimateOfFCP": 3617, "optimisticFCP": 2743, "pessimisticFCP": 2743, "roughEstimateOfFMP": 3780, "optimisticFMP": 2743, "pessimisticFMP": 2743, "roughEstimateOfTTI": 9278, "optimisticTTI": 5906, "pessimisticTTI": 9186, "roughEstimateOfTTFCPUI": 9278, "optimisticTTFCPUI": 5906, "pessimisticTTFCPUI": 9186, "roughEstimateOfSI": 5506, "optimisticSI": 2838, "pessimisticSI": 2743, "roughEstimateOfEIL": 75, "optimisticEIL": 94, "pessimisticEIL": 94}, - {"url": "http://www.onet.pl/", "roughEstimateOfFCP": 4230, "optimisticFCP": 3162, "pessimisticFCP": 3465, "roughEstimateOfFMP": 5355, "optimisticFMP": 4070, "pessimisticFMP": 4373, "roughEstimateOfTTI": 20585, "optimisticTTI": 13386, "pessimisticTTI": 24342, "roughEstimateOfTTFCPUI": 15282, "optimisticTTFCPUI": 13386, "pessimisticTTFCPUI": 12556, "roughEstimateOfSI": 14603, "optimisticSI": 9001, "pessimisticSI": 3465, "roughEstimateOfEIL": 1150, "optimisticEIL": 1437, "pessimisticEIL": 1437}, - {"url": "http://www.optmd.com/", "roughEstimateOfFCP": 1227, "optimisticFCP": 660, "pessimisticFCP": 870, "roughEstimateOfFMP": 1413, "optimisticFMP": 660, "pessimisticFMP": 870, "roughEstimateOfTTI": 1874, "optimisticTTI": 674, "pessimisticTTI": 870, "roughEstimateOfTTFCPUI": 1806, "optimisticTTFCPUI": 674, "pessimisticTTFCPUI": 718, "roughEstimateOfSI": 1227, "optimisticSI": 542, "pessimisticSI": 870, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, - {"url": "http://www.orange.fr/", "roughEstimateOfFCP": 3677, "optimisticFCP": 2319, "pessimisticFCP": 3372, "roughEstimateOfFMP": 4143, "optimisticFMP": 2319, "pessimisticFMP": 3665, "roughEstimateOfTTI": 14786, "optimisticTTI": 10328, "pessimisticTTI": 15532, "roughEstimateOfTTFCPUI": 14786, "optimisticTTFCPUI": 10328, "pessimisticTTFCPUI": 15532, "roughEstimateOfSI": 8536, "optimisticSI": 4710, "pessimisticSI": 3372, "roughEstimateOfEIL": 433, "optimisticEIL": 541, "pessimisticEIL": 541}, - {"url": "http://www.orkut.com/", "roughEstimateOfFCP": 1875, "optimisticFCP": 1120, "pessimisticFCP": 1206, "roughEstimateOfFMP": 2128, "optimisticFMP": 1120, "pessimisticFMP": 1206, "roughEstimateOfTTI": 3108, "optimisticTTI": 1436, "pessimisticTTI": 1436, "roughEstimateOfTTFCPUI": 3108, "optimisticTTFCPUI": 1436, "pessimisticTTFCPUI": 1436, "roughEstimateOfSI": 1875, "optimisticSI": 873, "pessimisticSI": 1206, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, - {"url": "http://www.partypoker.com/", "roughEstimateOfFCP": 6448, "optimisticFCP": 5184, "pessimisticFCP": 5476, "roughEstimateOfFMP": 6518, "optimisticFMP": 5184, "pessimisticFMP": 5476, "roughEstimateOfTTI": 18808, "optimisticTTI": 12254, "pessimisticTTI": 21900, "roughEstimateOfTTFCPUI": 13899, "optimisticTTFCPUI": 12254, "pessimisticTTFCPUI": 10993, "roughEstimateOfSI": 10690, "optimisticSI": 5272, "pessimisticSI": 5476, "roughEstimateOfEIL": 217, "optimisticEIL": 293, "pessimisticEIL": 250}, - {"url": "http://www.pcpop.com/", "roughEstimateOfFCP": 2910, "optimisticFCP": 2008, "pessimisticFCP": 2210, "roughEstimateOfFMP": 3130, "optimisticFMP": 2008, "pessimisticFMP": 2210, "roughEstimateOfTTI": 8601, "optimisticTTI": 4392, "pessimisticTTI": 9701, "roughEstimateOfTTFCPUI": 8601, "optimisticTTFCPUI": 4392, "pessimisticTTFCPUI": 9701, "roughEstimateOfSI": 5446, "optimisticSI": 3042, "pessimisticSI": 2210, "roughEstimateOfEIL": 80, "optimisticEIL": 100, "pessimisticEIL": 100}, - {"url": "http://www.pdfqueen.com/", "roughEstimateOfFCP": 2735, "optimisticFCP": 1857, "pessimisticFCP": 2042, "roughEstimateOfFMP": 2961, "optimisticFMP": 1857, "pessimisticFMP": 2042, "roughEstimateOfTTI": 4873, "optimisticTTI": 3053, "pessimisticTTI": 3203, "roughEstimateOfTTFCPUI": 4873, "optimisticTTFCPUI": 3053, "pessimisticTTFCPUI": 3203, "roughEstimateOfSI": 2735, "optimisticSI": 816, "pessimisticSI": 2042, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, - {"url": "http://www.pptv.com/", "roughEstimateOfFCP": 2828, "optimisticFCP": 2025, "pessimisticFCP": 2025, "roughEstimateOfFMP": 3026, "optimisticFMP": 2025, "pessimisticFMP": 2025, "roughEstimateOfTTI": 10247, "optimisticTTI": 5951, "pessimisticTTI": 11281, "roughEstimateOfTTFCPUI": 6786, "optimisticTTFCPUI": 5951, "pessimisticTTFCPUI": 3590, "roughEstimateOfSI": 11215, "optimisticSI": 7249, "pessimisticSI": 2025, "roughEstimateOfEIL": 623, "optimisticEIL": 779, "pessimisticEIL": 779}, - {"url": "http://www.rakuten.co.jp/", "roughEstimateOfFCP": 4183, "optimisticFCP": 3257, "pessimisticFCP": 3257, "roughEstimateOfFMP": 4320, "optimisticFMP": 3257, "pessimisticFMP": 3257, "roughEstimateOfTTI": 24817, "optimisticTTI": 13328, "pessimisticTTI": 33822, "roughEstimateOfTTFCPUI": 13639, "optimisticTTFCPUI": 13328, "pessimisticTTFCPUI": 8981, "roughEstimateOfSI": 5392, "optimisticSI": 2518, "pessimisticSI": 3257, "roughEstimateOfEIL": 1283, "optimisticEIL": 1604, "pessimisticEIL": 1604}, - {"url": "http://www.rakuten.ne.jp/", "roughEstimateOfFCP": 2959, "optimisticFCP": 2086, "pessimisticFCP": 2213, "roughEstimateOfFMP": 3167, "optimisticFMP": 2086, "pessimisticFMP": 2213, "roughEstimateOfTTI": 24461, "optimisticTTI": 12581, "pessimisticTTI": 34027, "roughEstimateOfTTFCPUI": 12636, "optimisticTTFCPUI": 12581, "pessimisticTTFCPUI": 7749, "roughEstimateOfSI": 4343, "optimisticSI": 2253, "pessimisticSI": 2213, "roughEstimateOfEIL": 1719, "optimisticEIL": 2149, "pessimisticEIL": 2149}, - {"url": "http://www.scribd.com/", "roughEstimateOfFCP": 2824, "optimisticFCP": 2022, "pessimisticFCP": 2022, "roughEstimateOfFMP": 4270, "optimisticFMP": 3208, "pessimisticFMP": 3210, "roughEstimateOfTTI": 13782, "optimisticTTI": 10227, "pessimisticTTI": 13435, "roughEstimateOfTTFCPUI": 13782, "optimisticTTFCPUI": 10227, "pessimisticTTFCPUI": 13435, "roughEstimateOfSI": 3386, "optimisticSI": 1658, "pessimisticSI": 2022, "roughEstimateOfEIL": 833, "optimisticEIL": 1041, "pessimisticEIL": 1041}, - {"url": "http://www.shopping.com/", "roughEstimateOfFCP": 2126, "optimisticFCP": 1387, "pessimisticFCP": 1387, "roughEstimateOfFMP": 2357, "optimisticFMP": 1387, "pessimisticFMP": 1387, "roughEstimateOfTTI": 3356, "optimisticTTI": 1532, "pessimisticTTI": 1858, "roughEstimateOfTTFCPUI": 3356, "optimisticTTFCPUI": 1532, "pessimisticTTFCPUI": 1858, "roughEstimateOfSI": 2126, "optimisticSI": 902, "pessimisticSI": 1387, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, - {"url": "http://www.skype.com/", "roughEstimateOfFCP": 4738, "optimisticFCP": 3762, "pessimisticFCP": 3762, "roughEstimateOfFMP": 4850, "optimisticFMP": 3762, "pessimisticFMP": 3762, "roughEstimateOfTTI": 8469, "optimisticTTI": 5911, "pessimisticTTI": 7382, "roughEstimateOfTTFCPUI": 8469, "optimisticTTFCPUI": 5911, "pessimisticTTFCPUI": 7382, "roughEstimateOfSI": 5178, "optimisticSI": 2131, "pessimisticSI": 3762, "roughEstimateOfEIL": 111, "optimisticEIL": 139, "pessimisticEIL": 139}, - {"url": "http://www.so-net.ne.jp/", "roughEstimateOfFCP": 5131, "optimisticFCP": 3169, "pessimisticFCP": 5260, "roughEstimateOfFMP": 5482, "optimisticFMP": 3169, "pessimisticFMP": 5260, "roughEstimateOfTTI": 13060, "optimisticTTI": 9802, "pessimisticTTI": 12397, "roughEstimateOfTTFCPUI": 13060, "optimisticTTFCPUI": 9802, "pessimisticTTFCPUI": 12397, "roughEstimateOfSI": 8408, "optimisticSI": 3742, "pessimisticSI": 5260, "roughEstimateOfEIL": 1798, "optimisticEIL": 2248, "pessimisticEIL": 2248}, - {"url": "http://www.softonic.com/", "roughEstimateOfFCP": 4230, "optimisticFCP": 3300, "pessimisticFCP": 3300, "roughEstimateOfFMP": 4365, "optimisticFMP": 3300, "pessimisticFMP": 3300, "roughEstimateOfTTI": 19507, "optimisticTTI": 15223, "pessimisticTTI": 19496, "roughEstimateOfTTFCPUI": 19507, "optimisticTTFCPUI": 15223, "pessimisticTTFCPUI": 19496, "roughEstimateOfSI": 14189, "optimisticSI": 8782, "pessimisticSI": 3300, "roughEstimateOfEIL": 317, "optimisticEIL": 396, "pessimisticEIL": 396}, - {"url": "http://www.sogou.com/", "roughEstimateOfFCP": 3025, "optimisticFCP": 2204, "pessimisticFCP": 2204, "roughEstimateOfFMP": 3215, "optimisticFMP": 2204, "pessimisticFMP": 2204, "roughEstimateOfTTI": 6205, "optimisticTTI": 3522, "pessimisticTTI": 5538, "roughEstimateOfTTFCPUI": 6205, "optimisticTTFCPUI": 3522, "pessimisticTTFCPUI": 5538, "roughEstimateOfSI": 6341, "optimisticSI": 3684, "pessimisticSI": 2204, "roughEstimateOfEIL": 261, "optimisticEIL": 326, "pessimisticEIL": 326}, - {"url": "http://www.soso.com/", "roughEstimateOfFCP": 2360, "optimisticFCP": 1490, "pessimisticFCP": 1733, "roughEstimateOfFMP": 2610, "optimisticFMP": 1490, "pessimisticFMP": 1733, "roughEstimateOfTTI": 7252, "optimisticTTI": 3940, "pessimisticTTI": 7306, "roughEstimateOfTTFCPUI": 6382, "optimisticTTFCPUI": 3940, "pessimisticTTFCPUI": 5373, "roughEstimateOfSI": 4431, "optimisticSI": 2539, "pessimisticSI": 1733, "roughEstimateOfEIL": 434, "optimisticEIL": 543, "pessimisticEIL": 543}, - {"url": "http://www.symantec.com/", "roughEstimateOfFCP": 4911, "optimisticFCP": 3824, "pessimisticFCP": 4033, "roughEstimateOfFMP": 5041, "optimisticFMP": 3824, "pessimisticFMP": 4033, "roughEstimateOfTTI": 18178, "optimisticTTI": 13591, "pessimisticTTI": 18718, "roughEstimateOfTTFCPUI": 18178, "optimisticTTFCPUI": 13591, "pessimisticTTFCPUI": 18718, "roughEstimateOfSI": 7132, "optimisticSI": 3400, "pessimisticSI": 4033, "roughEstimateOfEIL": 2678, "optimisticEIL": 3348, "pessimisticEIL": 3348}, - {"url": "http://www.t-online.de/", "roughEstimateOfFCP": 4892, "optimisticFCP": 3765, "pessimisticFCP": 4065, "roughEstimateOfFMP": 5827, "optimisticFMP": 3765, "pessimisticFMP": 5388, "roughEstimateOfTTI": 25446, "optimisticTTI": 19453, "pessimisticTTI": 27054, "roughEstimateOfTTFCPUI": 25446, "optimisticTTFCPUI": 19453, "pessimisticTTFCPUI": 27054, "roughEstimateOfSI": 9068, "optimisticSI": 4768, "pessimisticSI": 4065, "roughEstimateOfEIL": 397, "optimisticEIL": 497, "pessimisticEIL": 497}, - {"url": "http://www.tabelog.com/", "roughEstimateOfFCP": 3670, "optimisticFCP": 2323, "pessimisticFCP": 3351, "roughEstimateOfFMP": 3956, "optimisticFMP": 2323, "pessimisticFMP": 3351, "roughEstimateOfTTI": 13369, "optimisticTTI": 8904, "pessimisticTTI": 14283, "roughEstimateOfTTFCPUI": 13369, "optimisticTTFCPUI": 8904, "pessimisticTTFCPUI": 14283, "roughEstimateOfSI": 10077, "optimisticSI": 5820, "pessimisticSI": 3351, "roughEstimateOfEIL": 912, "optimisticEIL": 522, "pessimisticEIL": 1758}, - {"url": "http://www.thefreedictionary.com/", "roughEstimateOfFCP": 1805, "optimisticFCP": 1096, "pessimisticFCP": 1096, "roughEstimateOfFMP": 2050, "optimisticFMP": 1096, "pessimisticFMP": 1096, "roughEstimateOfTTI": 22243, "optimisticTTI": 16021, "pessimisticTTI": 24512, "roughEstimateOfTTFCPUI": 22243, "optimisticTTFCPUI": 16021, "pessimisticTTFCPUI": 24512, "roughEstimateOfSI": 2933, "optimisticSI": 1765, "pessimisticSI": 1096, "roughEstimateOfEIL": 466, "optimisticEIL": 583, "pessimisticEIL": 583}, - {"url": "http://www.thepiratebay.org/", "roughEstimateOfFCP": 3343, "optimisticFCP": 2446, "pessimisticFCP": 2551, "roughEstimateOfFMP": 3531, "optimisticFMP": 2446, "pessimisticFMP": 2551, "roughEstimateOfTTI": 6267, "optimisticTTI": 4252, "pessimisticTTI": 4702, "roughEstimateOfTTFCPUI": 6267, "optimisticTTFCPUI": 4252, "pessimisticTTFCPUI": 4702, "roughEstimateOfSI": 10690, "optimisticSI": 6630, "pessimisticSI": 2551, "roughEstimateOfEIL": 85, "optimisticEIL": 106, "pessimisticEIL": 106}, - {"url": "http://www.thestar.com.my", "roughEstimateOfFCP": 6406, "optimisticFCP": 5208, "pessimisticFCP": 5362, "roughEstimateOfFMP": 7241, "optimisticFMP": 5423, "pessimisticFMP": 6501, "roughEstimateOfTTI": 15922, "optimisticTTI": 10549, "pessimisticTTI": 17762, "roughEstimateOfTTFCPUI": 15922, "optimisticTTFCPUI": 10549, "pessimisticTTFCPUI": 17762, "roughEstimateOfSI": 11235, "optimisticSI": 5714, "pessimisticSI": 5362, "roughEstimateOfEIL": 275, "optimisticEIL": 344, "pessimisticEIL": 344}, - {"url": "http://www.tianya.cn/", "roughEstimateOfFCP": 2024, "optimisticFCP": 1294, "pessimisticFCP": 1294, "roughEstimateOfFMP": 2259, "optimisticFMP": 1294, "pessimisticFMP": 1294, "roughEstimateOfTTI": 8045, "optimisticTTI": 5462, "pessimisticTTI": 7039, "roughEstimateOfTTFCPUI": 8045, "optimisticTTFCPUI": 5462, "pessimisticTTFCPUI": 7039, "roughEstimateOfSI": 8898, "optimisticSI": 5933, "pessimisticSI": 1294, "roughEstimateOfEIL": 2076, "optimisticEIL": 2595, "pessimisticEIL": 2595}, - {"url": "http://www.torrentz.com/", "roughEstimateOfFCP": 519, "optimisticFCP": 305, "pessimisticFCP": 305, "roughEstimateOfFMP": 595, "optimisticFMP": 305, "pessimisticFMP": 305, "roughEstimateOfTTI": 1802, "optimisticTTI": 672, "pessimisticTTI": 717, "roughEstimateOfTTFCPUI": 1824, "optimisticTTFCPUI": 672, "pessimisticTTFCPUI": 767, "roughEstimateOfSI": 1030, "optimisticSI": 773, "pessimisticSI": 305, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, - {"url": "http://www.tumblr.com/", "roughEstimateOfFCP": 7546, "optimisticFCP": 6314, "pessimisticFCP": 6314, "roughEstimateOfFMP": 7546, "optimisticFMP": 6314, "pessimisticFMP": 6314, "roughEstimateOfTTI": 13238, "optimisticTTI": 10915, "pessimisticTTI": 11309, "roughEstimateOfTTFCPUI": 13238, "optimisticTTFCPUI": 10915, "pessimisticTTFCPUI": 11309, "roughEstimateOfSI": 7546, "optimisticSI": 1280, "pessimisticSI": 6314, "roughEstimateOfEIL": 2035, "optimisticEIL": 2544, "pessimisticEIL": 2544}, - {"url": "http://www.twitpic.com/", "roughEstimateOfFCP": 2004, "optimisticFCP": 1277, "pessimisticFCP": 1277, "roughEstimateOfFMP": 6086, "optimisticFMP": 4939, "pessimisticFMP": 4939, "roughEstimateOfTTI": 8586, "optimisticTTI": 6589, "pessimisticTTI": 6739, "roughEstimateOfTTFCPUI": 8586, "optimisticTTFCPUI": 6589, "pessimisticTTFCPUI": 6739, "roughEstimateOfSI": 2583, "optimisticSI": 1431, "pessimisticSI": 1277, "roughEstimateOfEIL": 981, "optimisticEIL": 1226, "pessimisticEIL": 1226}, - {"url": "http://www.typepad.com/", "roughEstimateOfFCP": 3665, "optimisticFCP": 1826, "pessimisticFCP": 3938, "roughEstimateOfFMP": 4229, "optimisticFMP": 2147, "pessimisticFMP": 3938, "roughEstimateOfTTI": 5732, "optimisticTTI": 3275, "pessimisticTTI": 4817, "roughEstimateOfTTFCPUI": 5732, "optimisticTTFCPUI": 3275, "pessimisticTTFCPUI": 4817, "roughEstimateOfSI": 3665, "optimisticSI": 962, "pessimisticSI": 3938, "roughEstimateOfEIL": 108, "optimisticEIL": 16, "pessimisticEIL": 253}, - {"url": "http://www.verizonwireless.com/", "roughEstimateOfFCP": 3131, "optimisticFCP": 2301, "pessimisticFCP": 2301, "roughEstimateOfFMP": 4107, "optimisticFMP": 3054, "pessimisticFMP": 3054, "roughEstimateOfTTI": 16796, "optimisticTTI": 12895, "pessimisticTTI": 16577, "roughEstimateOfTTFCPUI": 16796, "optimisticTTFCPUI": 12895, "pessimisticTTFCPUI": 16577, "roughEstimateOfSI": 3437, "optimisticSI": 1565, "pessimisticSI": 2301, "roughEstimateOfEIL": 931, "optimisticEIL": 1164, "pessimisticEIL": 1164}, - {"url": "http://www.vevo.com/", "roughEstimateOfFCP": 2592, "optimisticFCP": 1811, "pessimisticFCP": 1811, "roughEstimateOfFMP": 3701, "optimisticFMP": 2668, "pessimisticFMP": 2668, "roughEstimateOfTTI": 24162, "optimisticTTI": 18073, "pessimisticTTI": 26039, "roughEstimateOfTTFCPUI": 14355, "optimisticTTFCPUI": 18073, "pessimisticTTFCPUI": 4248, "roughEstimateOfSI": 4172, "optimisticSI": 2318, "pessimisticSI": 1811, "roughEstimateOfEIL": 2218, "optimisticEIL": 2772, "pessimisticEIL": 2772}, - {"url": "http://www.weather.com/", "roughEstimateOfFCP": 6844, "optimisticFCP": 5676, "pessimisticFCP": 5676, "roughEstimateOfFMP": 6860, "optimisticFMP": 5676, "pessimisticFMP": 5676, "roughEstimateOfTTI": 28799, "optimisticTTI": 23048, "pessimisticTTI": 29711, "roughEstimateOfTTFCPUI": 22772, "optimisticTTFCPUI": 23048, "pessimisticTTFCPUI": 16319, "roughEstimateOfSI": 7932, "optimisticSI": 3209, "pessimisticSI": 5676, "roughEstimateOfEIL": 1338, "optimisticEIL": 1672, "pessimisticEIL": 1672}, - {"url": "http://www.wikipedia.org/", "roughEstimateOfFCP": 1587, "optimisticFCP": 934, "pessimisticFCP": 934, "roughEstimateOfFMP": 1821, "optimisticFMP": 934, "pessimisticFMP": 934, "roughEstimateOfTTI": 5915, "optimisticTTI": 4070, "pessimisticTTI": 4161, "roughEstimateOfTTFCPUI": 5915, "optimisticTTFCPUI": 4070, "pessimisticTTFCPUI": 4161, "roughEstimateOfSI": 2299, "optimisticSI": 1387, "pessimisticSI": 934, "roughEstimateOfEIL": 1682, "optimisticEIL": 2102, "pessimisticEIL": 2102}, - {"url": "http://www.ynet.com/", "roughEstimateOfFCP": 2518, "optimisticFCP": 1744, "pessimisticFCP": 1744, "roughEstimateOfFMP": 2731, "optimisticFMP": 1744, "pessimisticFMP": 1744, "roughEstimateOfTTI": 9865, "optimisticTTI": 3663, "pessimisticTTI": 13483, "roughEstimateOfTTFCPUI": 5439, "optimisticTTFCPUI": 3663, "pessimisticTTFCPUI": 3649, "roughEstimateOfSI": 4689, "optimisticSI": 2718, "pessimisticSI": 1744, "roughEstimateOfEIL": 152, "optimisticEIL": 190, "pessimisticEIL": 190}, - {"url": "http://www.youdao.com/", "roughEstimateOfFCP": 3309, "optimisticFCP": 2463, "pessimisticFCP": 2463, "roughEstimateOfFMP": 3486, "optimisticFMP": 2463, "pessimisticFMP": 2463, "roughEstimateOfTTI": 4186, "optimisticTTI": 2463, "pessimisticTTI": 2463, "roughEstimateOfTTFCPUI": 3486, "optimisticTTFCPUI": 1231, "pessimisticTTFCPUI": 1277, "roughEstimateOfSI": 6077, "optimisticSI": 3376, "pessimisticSI": 2463, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, - {"url": "http://www.zol.com.cn/", "roughEstimateOfFCP": 2759, "optimisticFCP": 1341, "pessimisticFCP": 2707, "roughEstimateOfFMP": 3128, "optimisticFMP": 1341, "pessimisticFMP": 2707, "roughEstimateOfTTI": 10822, "optimisticTTI": 4970, "pessimisticTTI": 13868, "roughEstimateOfTTFCPUI": 5530, "optimisticTTFCPUI": 4970, "pessimisticTTFCPUI": 2107, "roughEstimateOfSI": 13453, "optimisticSI": 8531, "pessimisticSI": 2707, "roughEstimateOfEIL": 249, "optimisticEIL": 83, "pessimisticEIL": 539} + {"url": "https://flipkart.com", "roughEstimateOfFCP": 2617, "optimisticFCP": 2617, "pessimisticFCP": 2617, "roughEstimateOfFMP": 5860, "optimisticFMP": 5860, "pessimisticFMP": 5860, "roughEstimateOfTTI": 11538, "optimisticTTI": 10413, "pessimisticTTI": 12663, "roughEstimateOfTTFCPUI": 10413, "optimisticTTFCPUI": 10413, "pessimisticTTFCPUI": 12663, "roughEstimateOfSI": 6613, "optimisticSI": 3687, "pessimisticSI": 2617, "roughEstimateOfEIL": 766, "optimisticEIL": 957, "pessimisticEIL": 957}, + {"url": "https://vine.co/", "roughEstimateOfFCP": 1851, "optimisticFCP": 1851, "pessimisticFCP": 1851, "roughEstimateOfFMP": 2676, "optimisticFMP": 1851, "pessimisticFMP": 3501, "roughEstimateOfTTI": 7650, "optimisticTTI": 6822, "pessimisticTTI": 8477, "roughEstimateOfTTFCPUI": 6822, "optimisticTTFCPUI": 6822, "pessimisticTTFCPUI": 8477, "roughEstimateOfSI": 4097, "optimisticSI": 2246, "pessimisticSI": 1851, "roughEstimateOfEIL": 961, "optimisticEIL": 1202, "pessimisticEIL": 1202}, + {"url": "https://weather.com/", "roughEstimateOfFCP": 5161, "optimisticFCP": 5161, "pessimisticFCP": 5161, "roughEstimateOfFMP": 5161, "optimisticFMP": 5161, "pessimisticFMP": 5161, "roughEstimateOfTTI": 25468, "optimisticTTI": 22804, "pessimisticTTI": 28132, "roughEstimateOfTTFCPUI": 22804, "optimisticTTFCPUI": 22804, "pessimisticTTFCPUI": 28132, "roughEstimateOfSI": 6691, "optimisticSI": 2561, "pessimisticSI": 5161, "roughEstimateOfEIL": 1648, "optimisticEIL": 2060, "pessimisticEIL": 2060}, + {"url": "http://www.4399.com/", "roughEstimateOfFCP": 3254, "optimisticFCP": 3254, "pessimisticFCP": 3254, "roughEstimateOfFMP": 3585, "optimisticFMP": 3585, "pessimisticFMP": 3585, "roughEstimateOfTTI": 4800, "optimisticTTI": 3585, "pessimisticTTI": 6014, "roughEstimateOfTTFCPUI": 3585, "optimisticTTFCPUI": 3296, "pessimisticTTFCPUI": 6014, "roughEstimateOfSI": 3254, "optimisticSI": 350, "pessimisticSI": 3254, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, + {"url": "http://www.4shared.com/", "roughEstimateOfFCP": 4037, "optimisticFCP": 4037, "pessimisticFCP": 4037, "roughEstimateOfFMP": 4037, "optimisticFMP": 4037, "pessimisticFMP": 4037, "roughEstimateOfTTI": 5217, "optimisticTTI": 4973, "pessimisticTTI": 5460, "roughEstimateOfTTFCPUI": 4973, "optimisticTTFCPUI": 4973, "pessimisticTTFCPUI": 5460, "roughEstimateOfSI": 4427, "optimisticSI": 1467, "pessimisticSI": 4037, "roughEstimateOfEIL": 51, "optimisticEIL": 63, "pessimisticEIL": 63}, + {"url": "http://www.56.com/", "roughEstimateOfFCP": 3743, "optimisticFCP": 3743, "pessimisticFCP": 3743, "roughEstimateOfFMP": 3743, "optimisticFMP": 3743, "pessimisticFMP": 3743, "roughEstimateOfTTI": 10694, "optimisticTTI": 4248, "pessimisticTTI": 17140, "roughEstimateOfTTFCPUI": 4248, "optimisticTTFCPUI": 4248, "pessimisticTTFCPUI": 2226, "roughEstimateOfSI": 10467, "optimisticSI": 5917, "pessimisticSI": 3743, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, + {"url": "http://www.58.com/", "roughEstimateOfFCP": 3881, "optimisticFCP": 3881, "pessimisticFCP": 3881, "roughEstimateOfFMP": 3881, "optimisticFMP": 3881, "pessimisticFMP": 3881, "roughEstimateOfTTI": 4859, "optimisticTTI": 4264, "pessimisticTTI": 5454, "roughEstimateOfTTFCPUI": 4264, "optimisticTTFCPUI": 4264, "pessimisticTTFCPUI": 5454, "roughEstimateOfSI": 7655, "optimisticSI": 3844, "pessimisticSI": 3881, "roughEstimateOfEIL": 45, "optimisticEIL": 56, "pessimisticEIL": 56}, + {"url": "http://www.7k7k.com/", "roughEstimateOfFCP": 5097, "optimisticFCP": 5091, "pessimisticFCP": 5102, "roughEstimateOfFMP": 5097, "optimisticFMP": 5091, "pessimisticFMP": 5102, "roughEstimateOfTTI": 9235, "optimisticTTI": 5966, "pessimisticTTI": 12505, "roughEstimateOfTTFCPUI": 5966, "optimisticTTFCPUI": 5966, "pessimisticTTFCPUI": 2780, "roughEstimateOfSI": 9554, "optimisticSI": 4634, "pessimisticSI": 5102, "roughEstimateOfEIL": 1669, "optimisticEIL": 2086, "pessimisticEIL": 2086}, + {"url": "http://www.addthis.com/", "roughEstimateOfFCP": 2843, "optimisticFCP": 2843, "pessimisticFCP": 2843, "roughEstimateOfFMP": 2843, "optimisticFMP": 2843, "pessimisticFMP": 2843, "roughEstimateOfTTI": 9086, "optimisticTTI": 8156, "pessimisticTTI": 10016, "roughEstimateOfTTFCPUI": 8156, "optimisticTTFCPUI": 8156, "pessimisticTTFCPUI": 10016, "roughEstimateOfSI": 3731, "optimisticSI": 1524, "pessimisticSI": 2843, "roughEstimateOfEIL": 167, "optimisticEIL": 209, "pessimisticEIL": 209}, + {"url": "http://www.alexa.com/", "roughEstimateOfFCP": 6525, "optimisticFCP": 6525, "pessimisticFCP": 6525, "roughEstimateOfFMP": 6847, "optimisticFMP": 6847, "pessimisticFMP": 6847, "roughEstimateOfTTI": 13892, "optimisticTTI": 12388, "pessimisticTTI": 15396, "roughEstimateOfTTFCPUI": 12388, "optimisticTTFCPUI": 12388, "pessimisticTTFCPUI": 15396, "roughEstimateOfSI": 7060, "optimisticSI": 2192, "pessimisticSI": 6525, "roughEstimateOfEIL": 502, "optimisticEIL": 628, "pessimisticEIL": 628}, + {"url": "http://www.amazon.co.jp/", "roughEstimateOfFCP": 3059, "optimisticFCP": 3059, "pessimisticFCP": 3059, "roughEstimateOfFMP": 3163, "optimisticFMP": 3059, "pessimisticFMP": 3268, "roughEstimateOfTTI": 7835, "optimisticTTI": 6221, "pessimisticTTI": 9449, "roughEstimateOfTTFCPUI": 6221, "optimisticTTFCPUI": 6221, "pessimisticTTFCPUI": 9449, "roughEstimateOfSI": 4791, "optimisticSI": 2181, "pessimisticSI": 3059, "roughEstimateOfEIL": 262, "optimisticEIL": 328, "pessimisticEIL": 328}, + {"url": "http://www.att.com/", "roughEstimateOfFCP": 4945, "optimisticFCP": 4133, "pessimisticFCP": 5758, "roughEstimateOfFMP": 6313, "optimisticFMP": 4917, "pessimisticFMP": 7709, "roughEstimateOfTTI": 30184, "optimisticTTI": 26529, "pessimisticTTI": 33838, "roughEstimateOfTTFCPUI": 26529, "optimisticTTFCPUI": 26529, "pessimisticTTFCPUI": 14933, "roughEstimateOfSI": 16106, "optimisticSI": 9009, "pessimisticSI": 5758, "roughEstimateOfEIL": 1542, "optimisticEIL": 1928, "pessimisticEIL": 1928}, + {"url": "http://www.bing.com/", "roughEstimateOfFCP": 752, "optimisticFCP": 752, "pessimisticFCP": 752, "roughEstimateOfFMP": 1205, "optimisticFMP": 903, "pessimisticFMP": 1507, "roughEstimateOfTTI": 6217, "optimisticTTI": 4179, "pessimisticTTI": 8255, "roughEstimateOfTTFCPUI": 4179, "optimisticTTFCPUI": 4179, "pessimisticTTFCPUI": 8255, "roughEstimateOfSI": 2215, "optimisticSI": 1412, "pessimisticSI": 752, "roughEstimateOfEIL": 558, "optimisticEIL": 698, "pessimisticEIL": 698}, + {"url": "http://www.blogspot.com/", "roughEstimateOfFCP": 3213, "optimisticFCP": 3213, "pessimisticFCP": 3213, "roughEstimateOfFMP": 3213, "optimisticFMP": 3213, "pessimisticFMP": 3213, "roughEstimateOfTTI": 3852, "optimisticTTI": 3794, "pessimisticTTI": 3910, "roughEstimateOfTTFCPUI": 3794, "optimisticTTFCPUI": 3794, "pessimisticTTFCPUI": 3910, "roughEstimateOfSI": 12019, "optimisticSI": 7272, "pessimisticSI": 3213, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, + {"url": "http://www.brothersoft.com/", "roughEstimateOfFCP": 2310, "optimisticFCP": 2310, "pessimisticFCP": 2310, "roughEstimateOfFMP": 2930, "optimisticFMP": 2808, "pessimisticFMP": 3052, "roughEstimateOfTTI": 15533, "optimisticTTI": 13200, "pessimisticTTI": 17866, "roughEstimateOfTTFCPUI": 13200, "optimisticTTFCPUI": 13200, "pessimisticTTFCPUI": 17866, "roughEstimateOfSI": 4474, "optimisticSI": 2302, "pessimisticSI": 2310, "roughEstimateOfEIL": 636, "optimisticEIL": 795, "pessimisticEIL": 795}, + {"url": "http://www.china.com.cn/", "roughEstimateOfFCP": 4814, "optimisticFCP": 4166, "pessimisticFCP": 5462, "roughEstimateOfFMP": 4814, "optimisticFMP": 4166, "pessimisticFMP": 5462, "roughEstimateOfTTI": 7220, "optimisticTTI": 4773, "pessimisticTTI": 9666, "roughEstimateOfTTFCPUI": 4814, "optimisticTTFCPUI": 4773, "pessimisticTTFCPUI": 2707, "roughEstimateOfSI": 8687, "optimisticSI": 3848, "pessimisticSI": 5462, "roughEstimateOfEIL": 20, "optimisticEIL": 25, "pessimisticEIL": 25}, + {"url": "http://www.cnet.com/", "roughEstimateOfFCP": 2162, "optimisticFCP": 1980, "pessimisticFCP": 2343, "roughEstimateOfFMP": 2512, "optimisticFMP": 1980, "pessimisticFMP": 3044, "roughEstimateOfTTI": 25364, "optimisticTTI": 20728, "pessimisticTTI": 30000, "roughEstimateOfTTFCPUI": 20728, "optimisticTTFCPUI": 20728, "pessimisticTTFCPUI": 30000, "roughEstimateOfSI": 4616, "optimisticSI": 2388, "pessimisticSI": 2343, "roughEstimateOfEIL": 1061, "optimisticEIL": 1326, "pessimisticEIL": 1326}, + {"url": "http://www.cntv.cn/", "roughEstimateOfFCP": 3597, "optimisticFCP": 3597, "pessimisticFCP": 3597, "roughEstimateOfFMP": 3597, "optimisticFMP": 3597, "pessimisticFMP": 3597, "roughEstimateOfTTI": 3747, "optimisticTTI": 3597, "pessimisticTTI": 3897, "roughEstimateOfTTFCPUI": 3597, "optimisticTTFCPUI": 3597, "pessimisticTTFCPUI": 3897, "roughEstimateOfSI": 4475, "optimisticSI": 1705, "pessimisticSI": 3597, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, + {"url": "http://www.conduit.com/", "roughEstimateOfFCP": 2107, "optimisticFCP": 2107, "pessimisticFCP": 2107, "roughEstimateOfFMP": 2107, "optimisticFMP": 2107, "pessimisticFMP": 2107, "roughEstimateOfTTI": 2811, "optimisticTTI": 2409, "pessimisticTTI": 3212, "roughEstimateOfTTFCPUI": 2409, "optimisticTTFCPUI": 2409, "pessimisticTTFCPUI": 3212, "roughEstimateOfSI": 2929, "optimisticSI": 1292, "pessimisticSI": 2107, "roughEstimateOfEIL": 20, "optimisticEIL": 25, "pessimisticEIL": 25}, + {"url": "http://www.craigslist.org/", "roughEstimateOfFCP": 3652, "optimisticFCP": 3534, "pessimisticFCP": 3769, "roughEstimateOfFMP": 5222, "optimisticFMP": 5101, "pessimisticFMP": 5343, "roughEstimateOfTTI": 5222, "optimisticTTI": 5101, "pessimisticTTI": 5343, "roughEstimateOfTTFCPUI": 5222, "optimisticTTFCPUI": 4801, "pessimisticTTFCPUI": 5343, "roughEstimateOfSI": 4068, "optimisticSI": 1334, "pessimisticSI": 3769, "roughEstimateOfEIL": 97, "optimisticEIL": 16, "pessimisticEIL": 227}, + {"url": "http://www.dawn.com/", "roughEstimateOfFCP": 3514, "optimisticFCP": 3295, "pessimisticFCP": 3733, "roughEstimateOfFMP": 3514, "optimisticFMP": 3295, "pessimisticFMP": 3733, "roughEstimateOfTTI": 15887, "optimisticTTI": 13488, "pessimisticTTI": 18287, "roughEstimateOfTTFCPUI": 13488, "optimisticTTFCPUI": 13488, "pessimisticTTFCPUI": 18287, "roughEstimateOfSI": 5317, "optimisticSI": 2243, "pessimisticSI": 3733, "roughEstimateOfEIL": 298, "optimisticEIL": 373, "pessimisticEIL": 373}, + {"url": "http://www.depositfiles.com/", "roughEstimateOfFCP": 8437, "optimisticFCP": 8437, "pessimisticFCP": 8437, "roughEstimateOfFMP": 8437, "optimisticFMP": 8437, "pessimisticFMP": 8437, "roughEstimateOfTTI": 9701, "optimisticTTI": 9551, "pessimisticTTI": 9851, "roughEstimateOfTTFCPUI": 8437, "optimisticTTFCPUI": 1075, "pessimisticTTFCPUI": 1173, "roughEstimateOfSI": 13239, "optimisticSI": 5718, "pessimisticSI": 8437, "roughEstimateOfEIL": 273, "optimisticEIL": 341, "pessimisticEIL": 341}, + {"url": "http://www.deviantart.com/", "roughEstimateOfFCP": 4321, "optimisticFCP": 4321, "pessimisticFCP": 4321, "roughEstimateOfFMP": 5712, "optimisticFMP": 5712, "pessimisticFMP": 5712, "roughEstimateOfTTI": 34560, "optimisticTTI": 21179, "pessimisticTTI": 47941, "roughEstimateOfTTFCPUI": 9788, "optimisticTTFCPUI": 9788, "pessimisticTTFCPUI": 5483, "roughEstimateOfSI": 6071, "optimisticSI": 2509, "pessimisticSI": 4321, "roughEstimateOfEIL": 624, "optimisticEIL": 780, "pessimisticEIL": 780}, + {"url": "http://www.dion.ne.jp/", "roughEstimateOfFCP": 8318, "optimisticFCP": 5602, "pessimisticFCP": 11033, "roughEstimateOfFMP": 8318, "optimisticFMP": 5602, "pessimisticFMP": 11033, "roughEstimateOfTTI": 36156, "optimisticTTI": 15307, "pessimisticTTI": 57005, "roughEstimateOfTTFCPUI": 15307, "optimisticTTFCPUI": 15307, "pessimisticTTFCPUI": 19110, "roughEstimateOfSI": 18212, "optimisticSI": 8065, "pessimisticSI": 11033, "roughEstimateOfEIL": 1028, "optimisticEIL": 1285, "pessimisticEIL": 1285}, + {"url": "http://www.domaintools.com/", "roughEstimateOfFCP": 1599, "optimisticFCP": 1599, "pessimisticFCP": 1599, "roughEstimateOfFMP": 2750, "optimisticFMP": 2469, "pessimisticFMP": 3031, "roughEstimateOfTTI": 8616, "optimisticTTI": 8077, "pessimisticTTI": 9155, "roughEstimateOfTTFCPUI": 8077, "optimisticTTFCPUI": 8077, "pessimisticTTFCPUI": 9155, "roughEstimateOfSI": 9504, "optimisticSI": 6225, "pessimisticSI": 1599, "roughEstimateOfEIL": 920, "optimisticEIL": 617, "pessimisticEIL": 1682}, + {"url": "http://www.douban.com/", "roughEstimateOfFCP": 6832, "optimisticFCP": 6832, "pessimisticFCP": 6832, "roughEstimateOfFMP": 6832, "optimisticFMP": 6832, "pessimisticFMP": 6832, "roughEstimateOfTTI": 8153, "optimisticTTI": 7676, "pessimisticTTI": 8629, "roughEstimateOfTTFCPUI": 7676, "optimisticTTFCPUI": 7676, "pessimisticTTFCPUI": 8629, "roughEstimateOfSI": 10560, "optimisticSI": 4549, "pessimisticSI": 6832, "roughEstimateOfEIL": 558, "optimisticEIL": 697, "pessimisticEIL": 697}, + {"url": "http://www.ebay.com/", "roughEstimateOfFCP": 2985, "optimisticFCP": 2985, "pessimisticFCP": 2985, "roughEstimateOfFMP": 2985, "optimisticFMP": 2985, "pessimisticFMP": 2985, "roughEstimateOfTTI": 8722, "optimisticTTI": 7746, "pessimisticTTI": 9698, "roughEstimateOfTTFCPUI": 7746, "optimisticTTFCPUI": 7746, "pessimisticTTFCPUI": 9698, "roughEstimateOfSI": 4313, "optimisticSI": 1873, "pessimisticSI": 2985, "roughEstimateOfEIL": 187, "optimisticEIL": 233, "pessimisticEIL": 233}, + {"url": "https://www.ebs.in/IPS/", "roughEstimateOfFCP": 5979, "optimisticFCP": 4082, "pessimisticFCP": 7876, "roughEstimateOfFMP": 6547, "optimisticFMP": 4461, "pessimisticFMP": 8633, "roughEstimateOfTTI": 21565, "optimisticTTI": 7163, "pessimisticTTI": 35967, "roughEstimateOfTTFCPUI": 7163, "optimisticTTFCPUI": 7163, "pessimisticTTFCPUI": 4400, "roughEstimateOfSI": 10318, "optimisticSI": 3892, "pessimisticSI": 7876, "roughEstimateOfEIL": 298, "optimisticEIL": 373, "pessimisticEIL": 373}, + {"url": "http://www.espn.com/", "roughEstimateOfFCP": 2706, "optimisticFCP": 2706, "pessimisticFCP": 2706, "roughEstimateOfFMP": 3653, "optimisticFMP": 2706, "pessimisticFMP": 4600, "roughEstimateOfTTI": 24765, "optimisticTTI": 21745, "pessimisticTTI": 27784, "roughEstimateOfTTFCPUI": 21745, "optimisticTTFCPUI": 21745, "pessimisticTTFCPUI": 26166, "roughEstimateOfSI": 4175, "optimisticSI": 1904, "pessimisticSI": 2706, "roughEstimateOfEIL": 1316, "optimisticEIL": 1645, "pessimisticEIL": 1645}, + {"url": "http://www.facebook.com/", "roughEstimateOfFCP": 3485, "optimisticFCP": 3485, "pessimisticFCP": 3485, "roughEstimateOfFMP": 3485, "optimisticFMP": 3485, "pessimisticFMP": 3485, "roughEstimateOfTTI": 5230, "optimisticTTI": 4621, "pessimisticTTI": 5838, "roughEstimateOfTTFCPUI": 4621, "optimisticTTFCPUI": 4621, "pessimisticTTFCPUI": 5838, "roughEstimateOfSI": 4254, "optimisticSI": 1599, "pessimisticSI": 3485, "roughEstimateOfEIL": 65, "optimisticEIL": 82, "pessimisticEIL": 82}, + {"url": "http://www.fc2.com/", "roughEstimateOfFCP": 3142, "optimisticFCP": 3142, "pessimisticFCP": 3142, "roughEstimateOfFMP": 3142, "optimisticFMP": 3142, "pessimisticFMP": 3142, "roughEstimateOfTTI": 3439, "optimisticTTI": 3340, "pessimisticTTI": 3538, "roughEstimateOfTTFCPUI": 3340, "optimisticTTFCPUI": 3340, "pessimisticTTFCPUI": 3538, "roughEstimateOfSI": 3816, "optimisticSI": 1446, "pessimisticSI": 3142, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, + {"url": "http://www.filestube.com/", "roughEstimateOfFCP": 8803, "optimisticFCP": 8803, "pessimisticFCP": 8803, "roughEstimateOfFMP": 10863, "optimisticFMP": 10463, "pessimisticFMP": 11262, "roughEstimateOfTTI": 25332, "optimisticTTI": 18267, "pessimisticTTI": 32396, "roughEstimateOfTTFCPUI": 18267, "optimisticTTFCPUI": 18267, "pessimisticTTFCPUI": 15428, "roughEstimateOfSI": 12589, "optimisticSI": 5083, "pessimisticSI": 8803, "roughEstimateOfEIL": 1198, "optimisticEIL": 1497, "pessimisticEIL": 1497}, + {"url": "http://www.foxnews.com/", "roughEstimateOfFCP": 3188, "optimisticFCP": 3188, "pessimisticFCP": 3188, "roughEstimateOfFMP": 3188, "optimisticFMP": 3188, "pessimisticFMP": 3188, "roughEstimateOfTTI": 31622, "optimisticTTI": 22466, "pessimisticTTI": 40777, "roughEstimateOfTTFCPUI": 22466, "optimisticTTFCPUI": 22466, "pessimisticTTFCPUI": 34276, "roughEstimateOfSI": 11505, "optimisticSI": 6916, "pessimisticSI": 3188, "roughEstimateOfEIL": 731, "optimisticEIL": 914, "pessimisticEIL": 914}, + {"url": "http://www.getpersonas.com/", "roughEstimateOfFCP": 4232, "optimisticFCP": 4221, "pessimisticFCP": 4244, "roughEstimateOfFMP": 6497, "optimisticFMP": 6497, "pessimisticFMP": 6497, "roughEstimateOfTTI": 11313, "optimisticTTI": 9901, "pessimisticTTI": 12725, "roughEstimateOfTTFCPUI": 9901, "optimisticTTFCPUI": 9901, "pessimisticTTFCPUI": 12725, "roughEstimateOfSI": 4621, "optimisticSI": 1509, "pessimisticSI": 4244, "roughEstimateOfEIL": 1510, "optimisticEIL": 1888, "pessimisticEIL": 1888}, + {"url": "http://www.globo.com/", "roughEstimateOfFCP": 3289, "optimisticFCP": 3289, "pessimisticFCP": 3289, "roughEstimateOfFMP": 3733, "optimisticFMP": 3557, "pessimisticFMP": 3910, "roughEstimateOfTTI": 20160, "optimisticTTI": 17272, "pessimisticTTI": 23047, "roughEstimateOfTTFCPUI": 17272, "optimisticTTFCPUI": 17272, "pessimisticTTFCPUI": 23047, "roughEstimateOfSI": 4859, "optimisticSI": 2122, "pessimisticSI": 3289, "roughEstimateOfEIL": 2070, "optimisticEIL": 2588, "pessimisticEIL": 2588}, + {"url": "http://www.gmx.net/", "roughEstimateOfFCP": 1837, "optimisticFCP": 1837, "pessimisticFCP": 1837, "roughEstimateOfFMP": 1837, "optimisticFMP": 1837, "pessimisticFMP": 1837, "roughEstimateOfTTI": 8604, "optimisticTTI": 7227, "pessimisticTTI": 9980, "roughEstimateOfTTFCPUI": 7227, "optimisticTTFCPUI": 7227, "pessimisticTTFCPUI": 9980, "roughEstimateOfSI": 5165, "optimisticSI": 3015, "pessimisticSI": 1837, "roughEstimateOfEIL": 453, "optimisticEIL": 566, "pessimisticEIL": 566}, + {"url": "http://www.hatena.ne.jp/", "roughEstimateOfFCP": 1451, "optimisticFCP": 1325, "pessimisticFCP": 1576, "roughEstimateOfFMP": 1788, "optimisticFMP": 1788, "pessimisticFMP": 1788, "roughEstimateOfTTI": 23652, "optimisticTTI": 13265, "pessimisticTTI": 34040, "roughEstimateOfTTFCPUI": 13265, "optimisticTTFCPUI": 13265, "pessimisticTTFCPUI": 16676, "roughEstimateOfSI": 4725, "optimisticSI": 2821, "pessimisticSI": 1576, "roughEstimateOfEIL": 211, "optimisticEIL": 264, "pessimisticEIL": 264}, + {"url": "http://www.hexun.com/", "roughEstimateOfFCP": 4178, "optimisticFCP": 4178, "pessimisticFCP": 4178, "roughEstimateOfFMP": 5394, "optimisticFMP": 4178, "pessimisticFMP": 6609, "roughEstimateOfTTI": 8789, "optimisticTTI": 6968, "pessimisticTTI": 10611, "roughEstimateOfTTFCPUI": 6968, "optimisticTTFCPUI": 6968, "pessimisticTTFCPUI": 10611, "roughEstimateOfSI": 13345, "optimisticSI": 7771, "pessimisticSI": 4178, "roughEstimateOfEIL": 57, "optimisticEIL": 68, "pessimisticEIL": 74}, + {"url": "http://www.hotfile.com/", "roughEstimateOfFCP": 4984, "optimisticFCP": 4276, "pessimisticFCP": 5692, "roughEstimateOfFMP": 4984, "optimisticFMP": 4276, "pessimisticFMP": 5692, "roughEstimateOfTTI": 9348, "optimisticTTI": 6055, "pessimisticTTI": 12642, "roughEstimateOfTTFCPUI": 6055, "optimisticTTFCPUI": 6055, "pessimisticTTFCPUI": 12642, "roughEstimateOfSI": 10180, "optimisticSI": 4807, "pessimisticSI": 5692, "roughEstimateOfEIL": 100, "optimisticEIL": 126, "pessimisticEIL": 125}, + {"url": "http://www.hp.com/", "roughEstimateOfFCP": 8671, "optimisticFCP": 7087, "pessimisticFCP": 10255, "roughEstimateOfFMP": 9844, "optimisticFMP": 8298, "pessimisticFMP": 11390, "roughEstimateOfTTI": 17122, "optimisticTTI": 15928, "pessimisticTTI": 18315, "roughEstimateOfTTFCPUI": 15928, "optimisticTTFCPUI": 15928, "pessimisticTTFCPUI": 18315, "roughEstimateOfSI": 9773, "optimisticSI": 2398, "pessimisticSI": 10255, "roughEstimateOfEIL": 333, "optimisticEIL": 316, "pessimisticEIL": 517}, + {"url": "http://www.huffingtonpost.com/", "roughEstimateOfFCP": 3346, "optimisticFCP": 3346, "pessimisticFCP": 3346, "roughEstimateOfFMP": 3346, "optimisticFMP": 3346, "pessimisticFMP": 3346, "roughEstimateOfTTI": 20152, "optimisticTTI": 16999, "pessimisticTTI": 23306, "roughEstimateOfTTFCPUI": 16999, "optimisticTTFCPUI": 16999, "pessimisticTTFCPUI": 23306, "roughEstimateOfSI": 4689, "optimisticSI": 1974, "pessimisticSI": 3346, "roughEstimateOfEIL": 373, "optimisticEIL": 466, "pessimisticEIL": 466}, + {"url": "http://www.hulu.com/", "roughEstimateOfFCP": 12159, "optimisticFCP": 9521, "pessimisticFCP": 14797, "roughEstimateOfFMP": 14341, "optimisticFMP": 10300, "pessimisticFMP": 18383, "roughEstimateOfTTI": 24337, "optimisticTTI": 20793, "pessimisticTTI": 27881, "roughEstimateOfTTFCPUI": 20793, "optimisticTTFCPUI": 20793, "pessimisticTTFCPUI": 27881, "roughEstimateOfSI": 15130, "optimisticSI": 4115, "pessimisticSI": 14797, "roughEstimateOfEIL": 1468, "optimisticEIL": 1835, "pessimisticEIL": 1835}, + {"url": "http://www.iciba.com/", "roughEstimateOfFCP": 1445, "optimisticFCP": 1445, "pessimisticFCP": 1445, "roughEstimateOfFMP": 1445, "optimisticFMP": 1445, "pessimisticFMP": 1445, "roughEstimateOfTTI": 3538, "optimisticTTI": 3030, "pessimisticTTI": 4046, "roughEstimateOfTTFCPUI": 3030, "optimisticTTFCPUI": 3030, "pessimisticTTFCPUI": 4046, "roughEstimateOfSI": 5012, "optimisticSI": 3088, "pessimisticSI": 1445, "roughEstimateOfEIL": 394, "optimisticEIL": 492, "pessimisticEIL": 492}, + {"url": "http://www.ifeng.com/", "roughEstimateOfFCP": 3534, "optimisticFCP": 3534, "pessimisticFCP": 3534, "roughEstimateOfFMP": 3534, "optimisticFMP": 3534, "pessimisticFMP": 3534, "roughEstimateOfTTI": 5617, "optimisticTTI": 3534, "pessimisticTTI": 7700, "roughEstimateOfTTFCPUI": 3534, "optimisticTTFCPUI": 3494, "pessimisticTTFCPUI": 7700, "roughEstimateOfSI": 3534, "optimisticSI": 879, "pessimisticSI": 3534, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, + {"url": "http://www.imageshack.us/", "roughEstimateOfFCP": 7087, "optimisticFCP": 6859, "pessimisticFCP": 7315, "roughEstimateOfFMP": 7087, "optimisticFMP": 6859, "pessimisticFMP": 7315, "roughEstimateOfTTI": 9564, "optimisticTTI": 9559, "pessimisticTTI": 9570, "roughEstimateOfTTFCPUI": 9559, "optimisticTTFCPUI": 9559, "pessimisticTTFCPUI": 9570, "roughEstimateOfSI": 7087, "optimisticSI": 1817, "pessimisticSI": 7315, "roughEstimateOfEIL": 1491, "optimisticEIL": 1864, "pessimisticEIL": 1864}, + {"url": "http://www.irs.gov/", "roughEstimateOfFCP": 2757, "optimisticFCP": 2757, "pessimisticFCP": 2757, "roughEstimateOfFMP": 3956, "optimisticFMP": 3756, "pessimisticFMP": 4156, "roughEstimateOfTTI": 12097, "optimisticTTI": 10247, "pessimisticTTI": 13947, "roughEstimateOfTTFCPUI": 10247, "optimisticTTFCPUI": 10247, "pessimisticTTFCPUI": 13947, "roughEstimateOfSI": 3559, "optimisticSI": 1440, "pessimisticSI": 2757, "roughEstimateOfEIL": 225, "optimisticEIL": 281, "pessimisticEIL": 281}, + {"url": "http://www.java.com/", "roughEstimateOfFCP": 1268, "optimisticFCP": 1268, "pessimisticFCP": 1268, "roughEstimateOfFMP": 1268, "optimisticFMP": 1268, "pessimisticFMP": 1268, "roughEstimateOfTTI": 3189, "optimisticTTI": 2510, "pessimisticTTI": 3868, "roughEstimateOfTTFCPUI": 2510, "optimisticTTFCPUI": 2510, "pessimisticTTFCPUI": 3868, "roughEstimateOfSI": 2372, "optimisticSI": 1284, "pessimisticSI": 1268, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, + {"url": "http://www.linkedin.com/", "roughEstimateOfFCP": 4621, "optimisticFCP": 4621, "pessimisticFCP": 4621, "roughEstimateOfFMP": 4621, "optimisticFMP": 4621, "pessimisticFMP": 4621, "roughEstimateOfTTI": 5011, "optimisticTTI": 4875, "pessimisticTTI": 5147, "roughEstimateOfTTFCPUI": 4875, "optimisticTTFCPUI": 4875, "pessimisticTTFCPUI": 5147, "roughEstimateOfSI": 4621, "optimisticSI": 1074, "pessimisticSI": 4621, "roughEstimateOfEIL": 1598, "optimisticEIL": 1998, "pessimisticEIL": 1998}, + {"url": "http://www.livedoor.jp/", "roughEstimateOfFCP": 3285, "optimisticFCP": 3084, "pessimisticFCP": 3485, "roughEstimateOfFMP": 3285, "optimisticFMP": 3084, "pessimisticFMP": 3485, "roughEstimateOfTTI": 17387, "optimisticTTI": 12942, "pessimisticTTI": 21833, "roughEstimateOfTTFCPUI": 12942, "optimisticTTFCPUI": 12942, "pessimisticTTFCPUI": 16899, "roughEstimateOfSI": 7979, "optimisticSI": 4260, "pessimisticSI": 3485, "roughEstimateOfEIL": 221, "optimisticEIL": 276, "pessimisticEIL": 276}, + {"url": "http://www.liveperson.net/", "roughEstimateOfFCP": 11037, "optimisticFCP": 10841, "pessimisticFCP": 11234, "roughEstimateOfFMP": 11724, "optimisticFMP": 11626, "pessimisticFMP": 11822, "roughEstimateOfTTI": 35497, "optimisticTTI": 20137, "pessimisticTTI": 50858, "roughEstimateOfTTFCPUI": 11724, "optimisticTTFCPUI": 9516, "pessimisticTTFCPUI": 16403, "roughEstimateOfSI": 11037, "optimisticSI": 2248, "pessimisticSI": 11234, "roughEstimateOfEIL": 354, "optimisticEIL": 442, "pessimisticEIL": 442}, + {"url": "http://www.mail.ru/", "roughEstimateOfFCP": 5150, "optimisticFCP": 5150, "pessimisticFCP": 5150, "roughEstimateOfFMP": 5150, "optimisticFMP": 5150, "pessimisticFMP": 5150, "roughEstimateOfTTI": 11540, "optimisticTTI": 9846, "pessimisticTTI": 13233, "roughEstimateOfTTFCPUI": 9846, "optimisticTTFCPUI": 9846, "pessimisticTTFCPUI": 13233, "roughEstimateOfSI": 8487, "optimisticSI": 3849, "pessimisticSI": 5150, "roughEstimateOfEIL": 48, "optimisticEIL": 60, "pessimisticEIL": 60}, + {"url": "http://www.maktoob.com/", "roughEstimateOfFCP": 4278, "optimisticFCP": 4278, "pessimisticFCP": 4278, "roughEstimateOfFMP": 4278, "optimisticFMP": 4278, "pessimisticFMP": 4278, "roughEstimateOfTTI": 11438, "optimisticTTI": 10732, "pessimisticTTI": 12145, "roughEstimateOfTTFCPUI": 10732, "optimisticTTFCPUI": 10732, "pessimisticTTFCPUI": 12145, "roughEstimateOfSI": 5496, "optimisticSI": 2118, "pessimisticSI": 4278, "roughEstimateOfEIL": 265, "optimisticEIL": 332, "pessimisticEIL": 332}, + {"url": "http://www.marketgid.com/", "roughEstimateOfFCP": 3552, "optimisticFCP": 3552, "pessimisticFCP": 3552, "roughEstimateOfFMP": 6083, "optimisticFMP": 6083, "pessimisticFMP": 6083, "roughEstimateOfTTI": 8696, "optimisticTTI": 7823, "pessimisticTTI": 9569, "roughEstimateOfTTFCPUI": 7823, "optimisticTTFCPUI": 7823, "pessimisticTTFCPUI": 9569, "roughEstimateOfSI": 5185, "optimisticSI": 2233, "pessimisticSI": 3552, "roughEstimateOfEIL": 226, "optimisticEIL": 283, "pessimisticEIL": 283}, + {"url": "http://www.metacafe.com/", "roughEstimateOfFCP": 1848, "optimisticFCP": 1848, "pessimisticFCP": 1848, "roughEstimateOfFMP": 1849, "optimisticFMP": 1848, "pessimisticFMP": 1850, "roughEstimateOfTTI": 15520, "optimisticTTI": 13553, "pessimisticTTI": 17486, "roughEstimateOfTTFCPUI": 13553, "optimisticTTFCPUI": 13553, "pessimisticTTFCPUI": 17486, "roughEstimateOfSI": 2902, "optimisticSI": 1393, "pessimisticSI": 1848, "roughEstimateOfEIL": 361, "optimisticEIL": 451, "pessimisticEIL": 451}, + {"url": "http://www.metrolyrics.com/", "roughEstimateOfFCP": 3155, "optimisticFCP": 3056, "pessimisticFCP": 3254, "roughEstimateOfFMP": 3155, "optimisticFMP": 3056, "pessimisticFMP": 3254, "roughEstimateOfTTI": 57713, "optimisticTTI": 41320, "pessimisticTTI": 74106, "roughEstimateOfTTFCPUI": 41320, "optimisticTTFCPUI": 41320, "pessimisticTTFCPUI": 9760, "roughEstimateOfSI": 15355, "optimisticSI": 9636, "pessimisticSI": 3254, "roughEstimateOfEIL": 1134, "optimisticEIL": 1417, "pessimisticEIL": 1417}, + {"url": "http://www.mlb.com/", "roughEstimateOfFCP": 3023, "optimisticFCP": 2724, "pessimisticFCP": 3322, "roughEstimateOfFMP": 3023, "optimisticFMP": 2724, "pessimisticFMP": 3322, "roughEstimateOfTTI": 31206, "optimisticTTI": 26909, "pessimisticTTI": 35503, "roughEstimateOfTTFCPUI": 10841, "optimisticTTFCPUI": 10841, "pessimisticTTFCPUI": 8661, "roughEstimateOfSI": 7632, "optimisticSI": 4088, "pessimisticSI": 3322, "roughEstimateOfEIL": 689, "optimisticEIL": 861, "pessimisticEIL": 861}, + {"url": "http://www.mop.com/", "roughEstimateOfFCP": 6918, "optimisticFCP": 6380, "pessimisticFCP": 7456, "roughEstimateOfFMP": 6918, "optimisticFMP": 6380, "pessimisticFMP": 7456, "roughEstimateOfTTI": 21356, "optimisticTTI": 10859, "pessimisticTTI": 31854, "roughEstimateOfTTFCPUI": 10859, "optimisticTTFCPUI": 10859, "pessimisticTTFCPUI": 3194, "roughEstimateOfSI": 10204, "optimisticSI": 4006, "pessimisticSI": 7456, "roughEstimateOfEIL": 828, "optimisticEIL": 1035, "pessimisticEIL": 1035}, + {"url": "http://www.mozilla.org/", "roughEstimateOfFCP": 2111, "optimisticFCP": 1755, "pessimisticFCP": 2466, "roughEstimateOfFMP": 2487, "optimisticFMP": 1755, "pessimisticFMP": 3219, "roughEstimateOfTTI": 4945, "optimisticTTI": 4150, "pessimisticTTI": 5741, "roughEstimateOfTTFCPUI": 4150, "optimisticTTFCPUI": 4150, "pessimisticTTFCPUI": 5741, "roughEstimateOfSI": 2993, "optimisticSI": 1172, "pessimisticSI": 2466, "roughEstimateOfEIL": 842, "optimisticEIL": 1053, "pessimisticEIL": 1053}, + {"url": "http://www.msn.com/", "roughEstimateOfFCP": 2465, "optimisticFCP": 2465, "pessimisticFCP": 2465, "roughEstimateOfFMP": 2563, "optimisticFMP": 2465, "pessimisticFMP": 2661, "roughEstimateOfTTI": 11583, "optimisticTTI": 9510, "pessimisticTTI": 13655, "roughEstimateOfTTFCPUI": 9510, "optimisticTTFCPUI": 9510, "pessimisticTTFCPUI": 13655, "roughEstimateOfSI": 4081, "optimisticSI": 1949, "pessimisticSI": 2465, "roughEstimateOfEIL": 291, "optimisticEIL": 364, "pessimisticEIL": 364}, + {"url": "http://www.netflix.com/", "roughEstimateOfFCP": 2504, "optimisticFCP": 2504, "pessimisticFCP": 2504, "roughEstimateOfFMP": 2504, "optimisticFMP": 2504, "pessimisticFMP": 2504, "roughEstimateOfTTI": 6172, "optimisticTTI": 5613, "pessimisticTTI": 6731, "roughEstimateOfTTFCPUI": 5613, "optimisticTTFCPUI": 5613, "pessimisticTTFCPUI": 6731, "roughEstimateOfSI": 3356, "optimisticSI": 1413, "pessimisticSI": 2504, "roughEstimateOfEIL": 393, "optimisticEIL": 491, "pessimisticEIL": 491}, + {"url": "http://www.nih.gov/", "roughEstimateOfFCP": 4440, "optimisticFCP": 3999, "pessimisticFCP": 4882, "roughEstimateOfFMP": 4440, "optimisticFMP": 3999, "pessimisticFMP": 4882, "roughEstimateOfTTI": 8090, "optimisticTTI": 5686, "pessimisticTTI": 10494, "roughEstimateOfTTFCPUI": 5686, "optimisticTTFCPUI": 5686, "pessimisticTTFCPUI": 10494, "roughEstimateOfSI": 6852, "optimisticSI": 2807, "pessimisticSI": 4882, "roughEstimateOfEIL": 124, "optimisticEIL": 162, "pessimisticEIL": 148}, + {"url": "http://www.ning.com/", "roughEstimateOfFCP": 2711, "optimisticFCP": 2711, "pessimisticFCP": 2711, "roughEstimateOfFMP": 3004, "optimisticFMP": 3004, "pessimisticFMP": 3004, "roughEstimateOfTTI": 15290, "optimisticTTI": 11979, "pessimisticTTI": 18602, "roughEstimateOfTTFCPUI": 11979, "optimisticTTFCPUI": 11979, "pessimisticTTFCPUI": 5459, "roughEstimateOfSI": 3793, "optimisticSI": 1629, "pessimisticSI": 2711, "roughEstimateOfEIL": 253, "optimisticEIL": 316, "pessimisticEIL": 316}, + {"url": "http://www.nokia.com/", "roughEstimateOfFCP": 5687, "optimisticFCP": 5687, "pessimisticFCP": 5687, "roughEstimateOfFMP": 5888, "optimisticFMP": 5888, "pessimisticFMP": 5888, "roughEstimateOfTTI": 13822, "optimisticTTI": 11132, "pessimisticTTI": 16513, "roughEstimateOfTTFCPUI": 11132, "optimisticTTFCPUI": 11132, "pessimisticTTFCPUI": 16513, "roughEstimateOfSI": 6343, "optimisticSI": 2069, "pessimisticSI": 5687, "roughEstimateOfEIL": 211, "optimisticEIL": 264, "pessimisticEIL": 264}, + {"url": "http://www.ocn.ne.jp/", "roughEstimateOfFCP": 3343, "optimisticFCP": 3343, "pessimisticFCP": 3343, "roughEstimateOfFMP": 3343, "optimisticFMP": 3343, "pessimisticFMP": 3343, "roughEstimateOfTTI": 8479, "optimisticTTI": 6702, "pessimisticTTI": 10257, "roughEstimateOfTTFCPUI": 6702, "optimisticTTFCPUI": 6702, "pessimisticTTFCPUI": 2160, "roughEstimateOfSI": 5896, "optimisticSI": 2838, "pessimisticSI": 3343, "roughEstimateOfEIL": 75, "optimisticEIL": 93, "pessimisticEIL": 93}, + {"url": "http://www.onet.pl/", "roughEstimateOfFCP": 4214, "optimisticFCP": 4062, "pessimisticFCP": 4365, "roughEstimateOfFMP": 5121, "optimisticFMP": 4970, "pessimisticFMP": 5273, "roughEstimateOfTTI": 20439, "optimisticTTI": 14282, "pessimisticTTI": 26595, "roughEstimateOfTTFCPUI": 14282, "optimisticTTFCPUI": 14282, "pessimisticTTFCPUI": 14361, "roughEstimateOfSI": 15188, "optimisticSI": 9001, "pessimisticSI": 4365, "roughEstimateOfEIL": 1150, "optimisticEIL": 1437, "pessimisticEIL": 1437}, + {"url": "http://www.optmd.com/", "roughEstimateOfFCP": 1065, "optimisticFCP": 960, "pessimisticFCP": 1170, "roughEstimateOfFMP": 1065, "optimisticFMP": 960, "pessimisticFMP": 1170, "roughEstimateOfTTI": 1072, "optimisticTTI": 974, "pessimisticTTI": 1170, "roughEstimateOfTTFCPUI": 1065, "optimisticTTFCPUI": 974, "pessimisticTTFCPUI": 1018, "roughEstimateOfSI": 1269, "optimisticSI": 542, "pessimisticSI": 1170, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, + {"url": "http://www.orange.fr/", "roughEstimateOfFCP": 3776, "optimisticFCP": 3219, "pessimisticFCP": 4333, "roughEstimateOfFMP": 3892, "optimisticFMP": 3219, "pessimisticFMP": 4565, "roughEstimateOfTTI": 15169, "optimisticTTI": 12710, "pessimisticTTI": 17628, "roughEstimateOfTTFCPUI": 12710, "optimisticTTFCPUI": 12710, "pessimisticTTFCPUI": 17628, "roughEstimateOfSI": 9160, "optimisticSI": 4710, "pessimisticSI": 4333, "roughEstimateOfEIL": 433, "optimisticEIL": 541, "pessimisticEIL": 541}, + {"url": "http://www.orkut.com/", "roughEstimateOfFCP": 1463, "optimisticFCP": 1420, "pessimisticFCP": 1506, "roughEstimateOfFMP": 1463, "optimisticFMP": 1420, "pessimisticFMP": 1506, "roughEstimateOfTTI": 2036, "optimisticTTI": 2036, "pessimisticTTI": 2036, "roughEstimateOfTTFCPUI": 2036, "optimisticTTFCPUI": 2036, "pessimisticTTFCPUI": 2036, "roughEstimateOfSI": 1952, "optimisticSI": 873, "pessimisticSI": 1506, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, + {"url": "http://www.partypoker.com/", "roughEstimateOfFCP": 5630, "optimisticFCP": 5484, "pessimisticFCP": 5776, "roughEstimateOfFMP": 5630, "optimisticFMP": 5484, "pessimisticFMP": 5776, "roughEstimateOfTTI": 18284, "optimisticTTI": 13480, "pessimisticTTI": 23089, "roughEstimateOfTTFCPUI": 13480, "optimisticTTFCPUI": 13480, "pessimisticTTFCPUI": 11636, "roughEstimateOfSI": 10885, "optimisticSI": 5272, "pessimisticSI": 5776, "roughEstimateOfEIL": 217, "optimisticEIL": 293, "pessimisticEIL": 248}, + {"url": "http://www.pcpop.com/", "roughEstimateOfFCP": 2710, "optimisticFCP": 2710, "pessimisticFCP": 2711, "roughEstimateOfFMP": 2710, "optimisticFMP": 2710, "pessimisticFMP": 2711, "roughEstimateOfTTI": 7696, "optimisticTTI": 4791, "pessimisticTTI": 10601, "roughEstimateOfTTFCPUI": 4791, "optimisticTTFCPUI": 4791, "pessimisticTTFCPUI": 2030, "roughEstimateOfSI": 5771, "optimisticSI": 3042, "pessimisticSI": 2711, "roughEstimateOfEIL": 80, "optimisticEIL": 100, "pessimisticEIL": 99}, + {"url": "http://www.pdfqueen.com/", "roughEstimateOfFCP": 2642, "optimisticFCP": 2457, "pessimisticFCP": 2828, "roughEstimateOfFMP": 2642, "optimisticFMP": 2457, "pessimisticFMP": 2828, "roughEstimateOfTTI": 3953, "optimisticTTI": 3803, "pessimisticTTI": 4103, "roughEstimateOfTTFCPUI": 3803, "optimisticTTFCPUI": 3803, "pessimisticTTFCPUI": 4103, "roughEstimateOfSI": 2730, "optimisticSI": 816, "pessimisticSI": 2828, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, + {"url": "http://www.pptv.com/", "roughEstimateOfFCP": 2925, "optimisticFCP": 2925, "pessimisticFCP": 2925, "roughEstimateOfFMP": 2925, "optimisticFMP": 2925, "pessimisticFMP": 2925, "roughEstimateOfTTI": 9730, "optimisticTTI": 6979, "pessimisticTTI": 12481, "roughEstimateOfTTFCPUI": 6979, "optimisticTTFCPUI": 6979, "pessimisticTTFCPUI": 4158, "roughEstimateOfSI": 11800, "optimisticSI": 7249, "pessimisticSI": 2925, "roughEstimateOfEIL": 623, "optimisticEIL": 779, "pessimisticEIL": 779}, + {"url": "http://www.rakuten.co.jp/", "roughEstimateOfFCP": 3655, "optimisticFCP": 3655, "pessimisticFCP": 3655, "roughEstimateOfFMP": 3655, "optimisticFMP": 3655, "pessimisticFMP": 3655, "roughEstimateOfTTI": 24632, "optimisticTTI": 13628, "pessimisticTTI": 35636, "roughEstimateOfTTFCPUI": 13628, "optimisticTTFCPUI": 13628, "pessimisticTTFCPUI": 8878, "roughEstimateOfSI": 5651, "optimisticSI": 2518, "pessimisticSI": 3655, "roughEstimateOfEIL": 1283, "optimisticEIL": 1604, "pessimisticEIL": 1604}, + {"url": "http://www.rakuten.ne.jp/", "roughEstimateOfFCP": 2750, "optimisticFCP": 2686, "pessimisticFCP": 2813, "roughEstimateOfFMP": 2750, "optimisticFMP": 2686, "pessimisticFMP": 2813, "roughEstimateOfTTI": 24716, "optimisticTTI": 13181, "pessimisticTTI": 36252, "roughEstimateOfTTFCPUI": 13181, "optimisticTTFCPUI": 13181, "pessimisticTTFCPUI": 8946, "roughEstimateOfSI": 4733, "optimisticSI": 2253, "pessimisticSI": 2813, "roughEstimateOfEIL": 1719, "optimisticEIL": 2149, "pessimisticEIL": 2149}, + {"url": "http://www.scribd.com/", "roughEstimateOfFCP": 2622, "optimisticFCP": 2622, "pessimisticFCP": 2622, "roughEstimateOfFMP": 3809, "optimisticFMP": 3808, "pessimisticFMP": 3810, "roughEstimateOfTTI": 12775, "optimisticTTI": 11025, "pessimisticTTI": 14525, "roughEstimateOfTTFCPUI": 11025, "optimisticTTFCPUI": 11025, "pessimisticTTFCPUI": 14525, "roughEstimateOfSI": 3776, "optimisticSI": 1658, "pessimisticSI": 2622, "roughEstimateOfEIL": 833, "optimisticEIL": 1041, "pessimisticEIL": 1041}, + {"url": "http://www.shopping.com/", "roughEstimateOfFCP": 2287, "optimisticFCP": 2287, "pessimisticFCP": 2287, "roughEstimateOfFMP": 2287, "optimisticFMP": 2287, "pessimisticFMP": 2287, "roughEstimateOfTTI": 2595, "optimisticTTI": 2432, "pessimisticTTI": 2758, "roughEstimateOfTTFCPUI": 2432, "optimisticTTFCPUI": 2432, "pessimisticTTFCPUI": 2758, "roughEstimateOfSI": 2499, "optimisticSI": 902, "pessimisticSI": 2287, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, + {"url": "http://www.skype.com/", "roughEstimateOfFCP": 4362, "optimisticFCP": 4362, "pessimisticFCP": 4362, "roughEstimateOfFMP": 4362, "optimisticFMP": 4362, "pessimisticFMP": 4362, "roughEstimateOfTTI": 7226, "optimisticTTI": 6470, "pessimisticTTI": 7982, "roughEstimateOfTTFCPUI": 6470, "optimisticTTFCPUI": 6470, "pessimisticTTFCPUI": 7982, "roughEstimateOfSI": 5568, "optimisticSI": 2131, "pessimisticSI": 4362, "roughEstimateOfEIL": 111, "optimisticEIL": 139, "pessimisticEIL": 139}, + {"url": "http://www.so-net.ne.jp/", "roughEstimateOfFCP": 4864, "optimisticFCP": 3769, "pessimisticFCP": 5959, "roughEstimateOfFMP": 4864, "optimisticFMP": 3769, "pessimisticFMP": 5959, "roughEstimateOfTTI": 12210, "optimisticTTI": 10603, "pessimisticTTI": 13818, "roughEstimateOfTTFCPUI": 10603, "optimisticTTFCPUI": 10603, "pessimisticTTFCPUI": 13818, "roughEstimateOfSI": 8862, "optimisticSI": 3742, "pessimisticSI": 5959, "roughEstimateOfEIL": 1798, "optimisticEIL": 2248, "pessimisticEIL": 2248}, + {"url": "http://www.softonic.com/", "roughEstimateOfFCP": 3900, "optimisticFCP": 3900, "pessimisticFCP": 3900, "roughEstimateOfFMP": 3900, "optimisticFMP": 3900, "pessimisticFMP": 3900, "roughEstimateOfTTI": 19349, "optimisticTTI": 17141, "pessimisticTTI": 21558, "roughEstimateOfTTFCPUI": 17141, "optimisticTTFCPUI": 17141, "pessimisticTTFCPUI": 21558, "roughEstimateOfSI": 14579, "optimisticSI": 8782, "pessimisticSI": 3900, "roughEstimateOfEIL": 317, "optimisticEIL": 396, "pessimisticEIL": 396}, + {"url": "http://www.sogou.com/", "roughEstimateOfFCP": 2804, "optimisticFCP": 2804, "pessimisticFCP": 2804, "roughEstimateOfFMP": 2804, "optimisticFMP": 2804, "pessimisticFMP": 2804, "roughEstimateOfTTI": 5176, "optimisticTTI": 4122, "pessimisticTTI": 6231, "roughEstimateOfTTFCPUI": 4122, "optimisticTTFCPUI": 4122, "pessimisticTTFCPUI": 6231, "roughEstimateOfSI": 6731, "optimisticSI": 3684, "pessimisticSI": 2804, "roughEstimateOfEIL": 261, "optimisticEIL": 326, "pessimisticEIL": 326}, + {"url": "http://www.soso.com/", "roughEstimateOfFCP": 2211, "optimisticFCP": 2090, "pessimisticFCP": 2333, "roughEstimateOfFMP": 2211, "optimisticFMP": 2090, "pessimisticFMP": 2333, "roughEstimateOfTTI": 6131, "optimisticTTI": 4540, "pessimisticTTI": 7723, "roughEstimateOfTTFCPUI": 4540, "optimisticTTFCPUI": 4540, "pessimisticTTFCPUI": 5855, "roughEstimateOfSI": 4821, "optimisticSI": 2539, "pessimisticSI": 2333, "roughEstimateOfEIL": 434, "optimisticEIL": 543, "pessimisticEIL": 543}, + {"url": "http://www.symantec.com/", "roughEstimateOfFCP": 4183, "optimisticFCP": 4183, "pessimisticFCP": 4183, "roughEstimateOfFMP": 4183, "optimisticFMP": 4183, "pessimisticFMP": 4183, "roughEstimateOfTTI": 17662, "optimisticTTI": 13801, "pessimisticTTI": 21522, "roughEstimateOfTTFCPUI": 13801, "optimisticTTFCPUI": 13801, "pessimisticTTFCPUI": 21522, "roughEstimateOfSI": 7229, "optimisticSI": 3400, "pessimisticSI": 4183, "roughEstimateOfEIL": 2678, "optimisticEIL": 3348, "pessimisticEIL": 3348}, + {"url": "http://www.t-online.de/", "roughEstimateOfFCP": 4653, "optimisticFCP": 4365, "pessimisticFCP": 4941, "roughEstimateOfFMP": 5684, "optimisticFMP": 4365, "pessimisticFMP": 7003, "roughEstimateOfTTI": 26148, "optimisticTTI": 21892, "pessimisticTTI": 30403, "roughEstimateOfTTFCPUI": 21892, "optimisticTTFCPUI": 21892, "pessimisticTTFCPUI": 25800, "roughEstimateOfSI": 9637, "optimisticSI": 4768, "pessimisticSI": 4941, "roughEstimateOfEIL": 397, "optimisticEIL": 497, "pessimisticEIL": 497}, + {"url": "http://www.tabelog.com/", "roughEstimateOfFCP": 4037, "optimisticFCP": 3223, "pessimisticFCP": 4851, "roughEstimateOfFMP": 4037, "optimisticFMP": 3223, "pessimisticFMP": 4851, "roughEstimateOfTTI": 13553, "optimisticTTI": 10615, "pessimisticTTI": 16491, "roughEstimateOfTTFCPUI": 10615, "optimisticTTFCPUI": 10615, "pessimisticTTFCPUI": 16491, "roughEstimateOfSI": 11052, "optimisticSI": 5820, "pessimisticSI": 4851, "roughEstimateOfEIL": 418, "optimisticEIL": 522, "pessimisticEIL": 522}, + {"url": "http://www.thefreedictionary.com/", "roughEstimateOfFCP": 1696, "optimisticFCP": 1696, "pessimisticFCP": 1696, "roughEstimateOfFMP": 1696, "optimisticFMP": 1696, "pessimisticFMP": 1696, "roughEstimateOfTTI": 22429, "optimisticTTI": 17647, "pessimisticTTI": 27211, "roughEstimateOfTTFCPUI": 17647, "optimisticTTFCPUI": 17647, "pessimisticTTFCPUI": 27211, "roughEstimateOfSI": 3323, "optimisticSI": 1765, "pessimisticSI": 1696, "roughEstimateOfEIL": 466, "optimisticEIL": 583, "pessimisticEIL": 583}, + {"url": "http://www.thepiratebay.org/", "roughEstimateOfFCP": 3239, "optimisticFCP": 3239, "pessimisticFCP": 3239, "roughEstimateOfFMP": 3239, "optimisticFMP": 3239, "pessimisticFMP": 3239, "roughEstimateOfTTI": 5377, "optimisticTTI": 5002, "pessimisticTTI": 5752, "roughEstimateOfTTFCPUI": 5002, "optimisticTTFCPUI": 5002, "pessimisticTTFCPUI": 5752, "roughEstimateOfSI": 11137, "optimisticSI": 6630, "pessimisticSI": 3239, "roughEstimateOfEIL": 85, "optimisticEIL": 106, "pessimisticEIL": 106}, + {"url": "http://www.thestar.com.my", "roughEstimateOfFCP": 6037, "optimisticFCP": 5960, "pessimisticFCP": 6114, "roughEstimateOfFMP": 6531, "optimisticFMP": 5960, "pessimisticFMP": 7101, "roughEstimateOfTTI": 15401, "optimisticTTI": 12009, "pessimisticTTI": 18793, "roughEstimateOfTTFCPUI": 12009, "optimisticTTFCPUI": 12009, "pessimisticTTFCPUI": 18793, "roughEstimateOfSI": 11724, "optimisticSI": 5714, "pessimisticSI": 6114, "roughEstimateOfEIL": 275, "optimisticEIL": 344, "pessimisticEIL": 344}, + {"url": "http://www.tianya.cn/", "roughEstimateOfFCP": 1894, "optimisticFCP": 1894, "pessimisticFCP": 1894, "roughEstimateOfFMP": 1894, "optimisticFMP": 1894, "pessimisticFMP": 1894, "roughEstimateOfTTI": 7217, "optimisticTTI": 6062, "pessimisticTTI": 8371, "roughEstimateOfTTFCPUI": 6062, "optimisticTTFCPUI": 6062, "pessimisticTTFCPUI": 8371, "roughEstimateOfSI": 9288, "optimisticSI": 5933, "pessimisticSI": 1894, "roughEstimateOfEIL": 2076, "optimisticEIL": 2595, "pessimisticEIL": 2595}, + {"url": "http://www.torrentz.com/", "roughEstimateOfFCP": 605, "optimisticFCP": 605, "pessimisticFCP": 605, "roughEstimateOfFMP": 605, "optimisticFMP": 605, "pessimisticFMP": 605, "roughEstimateOfTTI": 995, "optimisticTTI": 972, "pessimisticTTI": 1017, "roughEstimateOfTTFCPUI": 972, "optimisticTTFCPUI": 972, "pessimisticTTFCPUI": 1067, "roughEstimateOfSI": 1225, "optimisticSI": 773, "pessimisticSI": 605, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, + {"url": "http://www.tumblr.com/", "roughEstimateOfFCP": 6914, "optimisticFCP": 6914, "pessimisticFCP": 6914, "roughEstimateOfFMP": 6914, "optimisticFMP": 6914, "pessimisticFMP": 6914, "roughEstimateOfTTI": 12007, "optimisticTTI": 11712, "pessimisticTTI": 12302, "roughEstimateOfTTFCPUI": 11712, "optimisticTTFCPUI": 11712, "pessimisticTTFCPUI": 12302, "roughEstimateOfSI": 6914, "optimisticSI": 1280, "pessimisticSI": 6914, "roughEstimateOfEIL": 2035, "optimisticEIL": 2544, "pessimisticEIL": 2544}, + {"url": "http://www.twitpic.com/", "roughEstimateOfFCP": 2177, "optimisticFCP": 2177, "pessimisticFCP": 2177, "roughEstimateOfFMP": 6139, "optimisticFMP": 6139, "pessimisticFMP": 6139, "roughEstimateOfTTI": 7864, "optimisticTTI": 7789, "pessimisticTTI": 7939, "roughEstimateOfTTFCPUI": 7789, "optimisticTTFCPUI": 7789, "pessimisticTTFCPUI": 7939, "roughEstimateOfSI": 3168, "optimisticSI": 1431, "pessimisticSI": 2177, "roughEstimateOfEIL": 981, "optimisticEIL": 1226, "pessimisticEIL": 1226}, + {"url": "http://www.typepad.com/", "roughEstimateOfFCP": 3182, "optimisticFCP": 2126, "pessimisticFCP": 4238, "roughEstimateOfFMP": 3343, "optimisticFMP": 2447, "pessimisticFMP": 4238, "roughEstimateOfTTI": 4421, "optimisticTTI": 3726, "pessimisticTTI": 5117, "roughEstimateOfTTFCPUI": 3726, "optimisticTTFCPUI": 3726, "pessimisticTTFCPUI": 5117, "roughEstimateOfSI": 3852, "optimisticSI": 962, "pessimisticSI": 4238, "roughEstimateOfEIL": 108, "optimisticEIL": 16, "pessimisticEIL": 253}, + {"url": "http://www.verizonwireless.com/", "roughEstimateOfFCP": 2901, "optimisticFCP": 2901, "pessimisticFCP": 2901, "roughEstimateOfFMP": 3654, "optimisticFMP": 3654, "pessimisticFMP": 3654, "roughEstimateOfTTI": 15968, "optimisticTTI": 13945, "pessimisticTTI": 17991, "roughEstimateOfTTFCPUI": 13945, "optimisticTTFCPUI": 13945, "pessimisticTTFCPUI": 17991, "roughEstimateOfSI": 3827, "optimisticSI": 1565, "pessimisticSI": 2901, "roughEstimateOfEIL": 931, "optimisticEIL": 1164, "pessimisticEIL": 1164}, + {"url": "http://www.vevo.com/", "roughEstimateOfFCP": 2111, "optimisticFCP": 2111, "pessimisticFCP": 2111, "roughEstimateOfFMP": 2968, "optimisticFMP": 2968, "pessimisticFMP": 2968, "roughEstimateOfTTI": 23106, "optimisticTTI": 19123, "pessimisticTTI": 27089, "roughEstimateOfTTFCPUI": 19123, "optimisticTTFCPUI": 19123, "pessimisticTTFCPUI": 4548, "roughEstimateOfSI": 4367, "optimisticSI": 2318, "pessimisticSI": 2111, "roughEstimateOfEIL": 2218, "optimisticEIL": 2772, "pessimisticEIL": 2772}, + {"url": "http://www.weather.com/", "roughEstimateOfFCP": 6576, "optimisticFCP": 6576, "pessimisticFCP": 6576, "roughEstimateOfFMP": 6576, "optimisticFMP": 6576, "pessimisticFMP": 6576, "roughEstimateOfTTI": 28787, "optimisticTTI": 24955, "pessimisticTTI": 32619, "roughEstimateOfTTFCPUI": 24955, "optimisticTTFCPUI": 24955, "pessimisticTTFCPUI": 32619, "roughEstimateOfSI": 8517, "optimisticSI": 3209, "pessimisticSI": 6576, "roughEstimateOfEIL": 1338, "optimisticEIL": 1672, "pessimisticEIL": 1672}, + {"url": "http://www.wikipedia.org/", "roughEstimateOfFCP": 1234, "optimisticFCP": 1234, "pessimisticFCP": 1234, "roughEstimateOfFMP": 1234, "optimisticFMP": 1234, "pessimisticFMP": 1234, "roughEstimateOfTTI": 4416, "optimisticTTI": 4370, "pessimisticTTI": 4461, "roughEstimateOfTTFCPUI": 4370, "optimisticTTFCPUI": 4370, "pessimisticTTFCPUI": 4461, "roughEstimateOfSI": 2494, "optimisticSI": 1387, "pessimisticSI": 1234, "roughEstimateOfEIL": 1682, "optimisticEIL": 2102, "pessimisticEIL": 2102}, + {"url": "http://www.ynet.com/", "roughEstimateOfFCP": 2344, "optimisticFCP": 2344, "pessimisticFCP": 2344, "roughEstimateOfFMP": 2344, "optimisticFMP": 2344, "pessimisticFMP": 2344, "roughEstimateOfTTI": 9248, "optimisticTTI": 4413, "pessimisticTTI": 14083, "roughEstimateOfTTFCPUI": 4413, "optimisticTTFCPUI": 4413, "pessimisticTTFCPUI": 4099, "roughEstimateOfSI": 5079, "optimisticSI": 2718, "pessimisticSI": 2344, "roughEstimateOfEIL": 152, "optimisticEIL": 190, "pessimisticEIL": 190}, + {"url": "http://www.youdao.com/", "roughEstimateOfFCP": 3063, "optimisticFCP": 3063, "pessimisticFCP": 3063, "roughEstimateOfFMP": 3063, "optimisticFMP": 3063, "pessimisticFMP": 3063, "roughEstimateOfTTI": 3063, "optimisticTTI": 3063, "pessimisticTTI": 3063, "roughEstimateOfTTFCPUI": 3063, "optimisticTTFCPUI": 1531, "pessimisticTTFCPUI": 1577, "roughEstimateOfSI": 6467, "optimisticSI": 3376, "pessimisticSI": 3063, "roughEstimateOfEIL": 13, "optimisticEIL": 16, "pessimisticEIL": 16}, + {"url": "http://www.zol.com.cn/", "roughEstimateOfFCP": 2924, "optimisticFCP": 1941, "pessimisticFCP": 3907, "roughEstimateOfFMP": 2924, "optimisticFMP": 1941, "pessimisticFMP": 3907, "roughEstimateOfTTI": 11501, "optimisticTTI": 6545, "pessimisticTTI": 16457, "roughEstimateOfTTFCPUI": 6545, "optimisticTTFCPUI": 6545, "pessimisticTTFCPUI": 2407, "roughEstimateOfSI": 14233, "optimisticSI": 8531, "pessimisticSI": 3907, "roughEstimateOfEIL": 249, "optimisticEIL": 83, "pessimisticEIL": 539} ] } \ No newline at end of file diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-contentful-paint-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-contentful-paint-test.js.snap index e0a6e5fa9951..36371a798a5c 100644 --- a/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-contentful-paint-test.js.snap +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-contentful-paint-test.js.snap @@ -2,8 +2,8 @@ exports[`Metrics: FCP should compute a simulated value 1`] = ` Object { - "optimistic": 761, - "pessimistic": 761, - "timing": 1293, + "optimistic": 911, + "pessimistic": 911, + "timing": 911, } `; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-cpu-idle-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-cpu-idle-test.js.snap index 10f5cbe8fbb1..22efa0102e25 100644 --- a/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-cpu-idle-test.js.snap +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-cpu-idle-test.js.snap @@ -2,8 +2,8 @@ exports[`FirstInteractive computed artifact: should simulate when settings specify 1`] = ` Object { - "optimistic": 2901, - "pessimistic": 3202, - "timing": 4782, + "optimistic": 3351, + "pessimistic": 3502, + "timing": 3351, } `; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-meaningful-paint-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-meaningful-paint-test.js.snap index 201f2596fe18..073b65db0383 100644 --- a/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-meaningful-paint-test.js.snap +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/first-meaningful-paint-test.js.snap @@ -2,8 +2,8 @@ exports[`Metrics: FMP should compute a simulated value 1`] = ` Object { - "optimistic": 1061, - "pessimistic": 1348, - "timing": 2186, + "optimistic": 1211, + "pessimistic": 1498, + "timing": 1355, } `; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/interactive-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/interactive-test.js.snap index 1531258c77d0..6a7b6fdf287d 100644 --- a/lighthouse-core/test/gather/computed/metrics/__snapshots__/interactive-test.js.snap +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/interactive-test.js.snap @@ -2,8 +2,8 @@ exports[`Metrics: TTI should compute a simulated value 1`] = ` Object { - "optimistic": 2901, - "pessimistic": 3202, - "timing": 4782, + "optimistic": 3351, + "pessimistic": 3502, + "timing": 3427, } `; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-contentful-paint-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-contentful-paint-test.js.snap index 16cda252dc16..74cb6de2587b 100644 --- a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-contentful-paint-test.js.snap +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-contentful-paint-test.js.snap @@ -2,8 +2,8 @@ exports[`Metrics: Lantern FCP should compute predicted value 1`] = ` Object { - "optimistic": 761, - "pessimistic": 761, - "timing": 1293, + "optimistic": 911, + "pessimistic": 911, + "timing": 911, } `; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-cpu-idle-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-cpu-idle-test.js.snap index 9b94f6079771..557f245565a0 100644 --- a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-cpu-idle-test.js.snap +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-cpu-idle-test.js.snap @@ -2,8 +2,8 @@ exports[`Metrics: Lantern TTFCPUI should compute predicted value 1`] = ` Object { - "optimistic": 2901, - "pessimistic": 3202, - "timing": 4782, + "optimistic": 3351, + "pessimistic": 3502, + "timing": 3351, } `; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-meaningful-paint-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-meaningful-paint-test.js.snap index f9de13441b02..ac3469f508ee 100644 --- a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-meaningful-paint-test.js.snap +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-first-meaningful-paint-test.js.snap @@ -2,8 +2,8 @@ exports[`Metrics: Lantern FMP should compute predicted value 1`] = ` Object { - "optimistic": 1061, - "pessimistic": 1348, - "timing": 2186, + "optimistic": 1211, + "pessimistic": 1498, + "timing": 1355, } `; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-interactive-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-interactive-test.js.snap index cdd0966a95dd..df27af4e3e39 100644 --- a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-interactive-test.js.snap +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-interactive-test.js.snap @@ -2,8 +2,8 @@ exports[`Metrics: Lantern TTI should compute predicted value 1`] = ` Object { - "optimistic": 2901, - "pessimistic": 3202, - "timing": 4782, + "optimistic": 3351, + "pessimistic": 3502, + "timing": 3427, } `; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-speed-index-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-speed-index-test.js.snap index fbc7279c5b8d..7b4ceed389a0 100644 --- a/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-speed-index-test.js.snap +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/lantern-speed-index-test.js.snap @@ -3,7 +3,7 @@ exports[`Metrics: Lantern Speed Index should compute predicted value 1`] = ` Object { "optimistic": 605, - "pessimistic": 1480, - "timing": 1559, + "pessimistic": 1630, + "timing": 1656, } `; diff --git a/lighthouse-core/test/gather/computed/metrics/__snapshots__/speed-index-test.js.snap b/lighthouse-core/test/gather/computed/metrics/__snapshots__/speed-index-test.js.snap index 7a795684f678..61a193fc7b46 100644 --- a/lighthouse-core/test/gather/computed/metrics/__snapshots__/speed-index-test.js.snap +++ b/lighthouse-core/test/gather/computed/metrics/__snapshots__/speed-index-test.js.snap @@ -3,7 +3,7 @@ exports[`Metrics: Speed Index should compute a simulated value 1`] = ` Object { "optimistic": 605, - "pessimistic": 1480, - "timing": 1559, + "pessimistic": 1630, + "timing": 1656, } `; diff --git a/lighthouse-core/test/lib/dependency-graph/simulator/dns-cache-test.js b/lighthouse-core/test/lib/dependency-graph/simulator/dns-cache-test.js new file mode 100644 index 000000000000..ec0765c5051c --- /dev/null +++ b/lighthouse-core/test/lib/dependency-graph/simulator/dns-cache-test.js @@ -0,0 +1,64 @@ +/** + * @license Copyright 2018 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + */ +'use strict'; + +const DNSCache = require('../../../../lib/dependency-graph/simulator/dns-cache'); +const MULTIPLIER = DNSCache.RTT_MULTIPLIER; + +/* eslint-env jest */ + +describe('DependencyGraph/Simulator/DNSCache', () => { + let dns; + let request; + + beforeEach(() => { + dns = new DNSCache({rtt: 100}); + request = {parsedURL: {host: 'example.com'}}; + }); + + describe('.getTimeUntilResolution', () => { + it('should return the RTT multiplied', () => { + const resolutionTime = dns.getTimeUntilResolution(request); + expect(resolutionTime).toBe(100 * MULTIPLIER); + }); + + it('should return time with requestedAt', () => { + const resolutionTime = dns.getTimeUntilResolution(request, {requestedAt: 1500}); + expect(resolutionTime).toBe(100 * MULTIPLIER); + }); + + it('should not cache by default', () => { + dns.getTimeUntilResolution(request, {requestedAt: 0}); + const resolutionTime = dns.getTimeUntilResolution(request, {requestedAt: 1000}); + expect(resolutionTime).toBe(100 * MULTIPLIER); + }); + + it('should cache when told', () => { + dns.getTimeUntilResolution(request, {requestedAt: 0, shouldUpdateCache: true}); + const resolutionTime = dns.getTimeUntilResolution(request, {requestedAt: 1000}); + expect(resolutionTime).toBe(0); + }); + + it('should cache by domain', () => { + dns.getTimeUntilResolution(request, {requestedAt: 0, shouldUpdateCache: true}); + const otherRequest = {parsedURL: {host: 'other-example.com'}}; + const resolutionTime = dns.getTimeUntilResolution(otherRequest, {requestedAt: 1000}); + expect(resolutionTime).toBe(100 * MULTIPLIER); + }); + + it('should not update cache with later times', () => { + dns.getTimeUntilResolution(request, {requestedAt: 1000, shouldUpdateCache: true}); + dns.getTimeUntilResolution(request, {requestedAt: 1500, shouldUpdateCache: true}); + dns.getTimeUntilResolution(request, {requestedAt: 500, shouldUpdateCache: true}); + dns.getTimeUntilResolution(request, {requestedAt: 5000, shouldUpdateCache: true}); + + expect(dns.getTimeUntilResolution(request, {requestedAt: 0})).toBe(100 * MULTIPLIER); + expect(dns.getTimeUntilResolution(request, {requestedAt: 550})).toBe(100 * MULTIPLIER - 50); + expect(dns.getTimeUntilResolution(request, {requestedAt: 1000})).toBe(0); + expect(dns.getTimeUntilResolution(request, {requestedAt: 2000})).toBe(0); + }); + }); +}); diff --git a/lighthouse-core/test/lib/dependency-graph/simulator/simulator-test.js b/lighthouse-core/test/lib/dependency-graph/simulator/simulator-test.js index 36bfe6a366aa..ac9bec7db2e1 100644 --- a/lighthouse-core/test/lib/dependency-graph/simulator/simulator-test.js +++ b/lighthouse-core/test/lib/dependency-graph/simulator/simulator-test.js @@ -8,6 +8,7 @@ const NetworkNode = require('../../../../lib/dependency-graph/network-node'); const CpuNode = require('../../../../lib/dependency-graph/cpu-node'); const Simulator = require('../../../../lib/dependency-graph/simulator/simulator'); +const DNSCache = require('../../../../lib/dependency-graph/simulator/dns-cache'); const assert = require('assert'); let nextRequestId = 1; @@ -35,6 +36,18 @@ function cpuTask({tid, ts, duration}) { /* eslint-env jest */ describe('DependencyGraph/Simulator', () => { + // Insulate the simulator tests from DNS multiplier changes + let originalDNSMultiplier; + + beforeAll(() => { + originalDNSMultiplier = DNSCache.RTT_MULTIPLIER; + DNSCache.RTT_MULTIPLIER = 1; + }); + + afterAll(() => { + DNSCache.RTT_MULTIPLIER = originalDNSMultiplier; + }); + describe('.simulate', () => { const serverResponseTimeByOrigin = new Map([['http://example.com', 500]]); From ba4e86c6a0bc9a3b308a7ea219975447eac00dcc Mon Sep 17 00:00:00 2001 From: Patrick Hulce Date: Mon, 9 Jul 2018 10:30:22 -0700 Subject: [PATCH 4/4] lint --- lighthouse-core/lib/dependency-graph/simulator/dns-cache.js | 4 ++-- lighthouse-core/test/audits/metrics-test.js | 1 - lighthouse-core/test/audits/predictive-perf-test.js | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js b/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js index 0ea0480033e8..82dce0f9b9a0 100644 --- a/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js +++ b/lighthouse-core/lib/dependency-graph/simulator/dns-cache.js @@ -39,7 +39,7 @@ class DNSCache { * @return {number} */ getTimeUntilResolution(request, options) { - const {requestedAt = 0, shouldUpdateCache = false} = options || {} + const {requestedAt = 0, shouldUpdateCache = false} = options || {}; const domain = request.parsedURL.host; const cacheEntry = this._resolvedDomainNames.get(domain); @@ -76,7 +76,7 @@ class DNSCache { setResolvedAt(domain, resolvedAt) { this._resolvedDomainNames.set(domain, {resolvedAt}); } -}; +} DNSCache.RTT_MULTIPLIER = DNS_RESOLUTION_RTT_MULTIPLIER; diff --git a/lighthouse-core/test/audits/metrics-test.js b/lighthouse-core/test/audits/metrics-test.js index bfb4f9658889..2d6bc31a6a1a 100644 --- a/lighthouse-core/test/audits/metrics-test.js +++ b/lighthouse-core/test/audits/metrics-test.js @@ -7,7 +7,6 @@ const Audit = require('../../audits/metrics.js'); const Runner = require('../../runner.js'); -const assert = require('assert'); const pwaTrace = require('../fixtures/traces/progressive-app-m60.json'); const pwaDevtoolsLog = require('../fixtures/traces/progressive-app-m60.devtools.log.json'); diff --git a/lighthouse-core/test/audits/predictive-perf-test.js b/lighthouse-core/test/audits/predictive-perf-test.js index 3b63dc1d4a9d..4eab2c36bd23 100644 --- a/lighthouse-core/test/audits/predictive-perf-test.js +++ b/lighthouse-core/test/audits/predictive-perf-test.js @@ -7,7 +7,6 @@ const PredictivePerf = require('../../audits/predictive-perf.js'); const Runner = require('../../runner.js'); -const assert = require('assert'); const acceptableTrace = require('../fixtures/traces/progressive-app-m60.json'); const acceptableDevToolsLog = require('../fixtures/traces/progressive-app-m60.devtools.log.json');