Skip to content

Commit ac99084

Browse files
authored
fix(script-blocking-first-paint): ignore latent resources (#2721)
* fix(script-blocking-first-paint): ignore latent resources * add comment to test case
1 parent d5aead5 commit ac99084

File tree

2 files changed

+29
-12
lines changed

2 files changed

+29
-12
lines changed

lighthouse-core/audits/dobetterweb/script-blocking-first-paint.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,11 @@ class ScriptBlockingFirstPaint extends Audit {
3636
* @return {!AuditResult}
3737
*/
3838
static audit(artifacts) {
39-
return LinkBlockingFirstPaintAudit.computeAuditResultForTags(artifacts, 'SCRIPT');
39+
const trace = artifacts.traces[Audit.DEFAULT_PASS];
40+
return artifacts.requestTraceOfTab(trace).then(traceOfTab => {
41+
const fcpTsInMs = traceOfTab.timestamps.firstContentfulPaint / 1000;
42+
return LinkBlockingFirstPaintAudit.computeAuditResultForTags(artifacts, 'SCRIPT', fcpTsInMs);
43+
});
4044
}
4145
}
4246

lighthouse-core/test/audits/dobetterweb/script-blocking-first-paint-test.js

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,23 @@ describe('Script Block First Paint audit', () => {
1919
src: 'http://google.com/js/app.js',
2020
url: 'http://google.com/js/app.js',
2121
};
22-
const auditResult = ScriptBlockingFirstPaintAudit.audit({
22+
const timestamps = {firstContentfulPaint: 5600 * 1000};
23+
return ScriptBlockingFirstPaintAudit.audit({
24+
traces: {},
25+
requestTraceOfTab: () => Promise.resolve({timestamps}),
2326
TagsBlockingFirstPaint: [
2427
{
2528
tag: scriptDetails,
2629
transferSize: 100,
2730
startTime: 1,
2831
endTime: 1.1
2932
},
33+
{
34+
tag: scriptDetails,
35+
transferSize: 100,
36+
startTime: 15, // well after FCP and should be ignored
37+
endTime: 15.1
38+
},
3039
{
3140
tag: scriptDetails,
3241
transferSize: 50,
@@ -39,21 +48,25 @@ describe('Script Block First Paint audit', () => {
3948
spendTime: 110
4049
}
4150
]
51+
}).then(auditResult => {
52+
assert.equal(auditResult.rawValue, 150);
53+
assert.equal(auditResult.displayValue, `2 resources delayed first paint by 150${NBSP}ms`);
54+
const results = auditResult.details.items;
55+
assert.equal(results.length, 2);
56+
assert.ok(results[0][0].text.includes('js/app.js'), 'has a url');
57+
assert.equal(results[0][2].text, `150${NBSP}ms`);
58+
assert.equal(results[1][2].text, `50${NBSP}ms`);
4259
});
43-
assert.equal(auditResult.rawValue, 150);
44-
assert.equal(auditResult.displayValue, `2 resources delayed first paint by 150${NBSP}ms`);
45-
const results = auditResult.details.items;
46-
assert.equal(results.length, 2);
47-
assert.ok(results[0][0].text.includes('js/app.js'), 'has a url');
48-
assert.equal(results[0][2].text, `150${NBSP}ms`);
49-
assert.equal(results[1][2].text, `50${NBSP}ms`);
5060
});
5161

5262
it('passes when there are no scripts found which block first paint', () => {
53-
const auditResult = ScriptBlockingFirstPaintAudit.audit({
63+
return ScriptBlockingFirstPaintAudit.audit({
64+
traces: {},
65+
requestTraceOfTab: () => Promise.resolve({timestamps: {}}),
5466
TagsBlockingFirstPaint: []
67+
}).then(auditResult => {
68+
assert.equal(auditResult.rawValue, 0);
69+
assert.equal(auditResult.details.items.length, 0);
5570
});
56-
assert.equal(auditResult.rawValue, 0);
57-
assert.equal(auditResult.details.items.length, 0);
5871
});
5972
});

0 commit comments

Comments
 (0)