Skip to content

Commit 7e64d56

Browse files
authored
core(uses-text-compression): ignore percent threshold for large savings (#16165)
1 parent 4b36705 commit 7e64d56

2 files changed

Lines changed: 27 additions & 29 deletions

File tree

core/audits/byte-efficiency/uses-text-compression.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,18 @@ class ResponsesAreCompressed extends ByteEfficiencyAudit {
5959
const gzipSize = record.gzipSize;
6060
const gzipSavings = originalSize - gzipSize;
6161

62-
// we require at least 10% savings off the original size AND at least 1400 bytes
63-
// if the savings is smaller than either, we don't care
64-
if (1 - gzipSize / originalSize < IGNORE_THRESHOLD_IN_PERCENT ||
65-
gzipSavings < IGNORE_THRESHOLD_IN_BYTES ||
66-
record.transferSize < gzipSize
67-
) {
62+
// Not every resource is smaller when compressed.
63+
if (record.transferSize < gzipSize) {
64+
return;
65+
}
66+
67+
// If savings is small, let's be generous and not surface the minor savings.
68+
if (gzipSavings < IGNORE_THRESHOLD_IN_BYTES) {
69+
return;
70+
}
71+
72+
// Require at least 20kb of savings ... or some percentage of total resource size.
73+
if (gzipSavings < 20_000 && 1 - gzipSize / originalSize < IGNORE_THRESHOLD_IN_PERCENT) {
6874
return;
6975
}
7076

core/test/audits/byte-efficiency/uses-text-compression-test.js

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,36 @@
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66

7-
const KB = 1024;
8-
import assert from 'assert/strict';
9-
107
import ResponsesAreCompressedAudit from '../../../audits/byte-efficiency/uses-text-compression.js';
118

9+
const KB = 1024;
10+
const MB = 1024 * KB;
11+
1212
function generateResponse(options) {
13-
return Object.assign({
13+
return {
1414
url: `http://google.com/${options.file}`,
1515
transferSize: options.resourceSize || 0,
1616
resourceSize: 0,
1717
gzipSize: 0,
18-
}, options);
18+
...options,
19+
};
1920
}
2021

2122
describe('Page uses optimized responses', () => {
22-
it('fails when responses are collectively unoptimized', () => {
23-
const auditResult = ResponsesAreCompressedAudit.audit_({
24-
ResponseCompression: [
25-
generateResponse({file: 'index.js', resourceSize: 100 * KB, gzipSize: 90 * KB}), // 10kb & 10%
26-
generateResponse({file: 'index.css', resourceSize: 50 * KB, gzipSize: 37 * KB}), // 13kb & 26% (hit)
27-
generateResponse({file: 'index.json', resourceSize: 2048 * KB, gzipSize: 1024 * KB}), // 1024kb & 50% (hit)
28-
],
29-
});
30-
31-
assert.equal(auditResult.items.length, 2);
32-
});
33-
34-
it('passes when all responses are sufficiently optimized', () => {
23+
it('applies a threshold', () => {
3524
const auditResult = ResponsesAreCompressedAudit.audit_({
3625
ResponseCompression: [
37-
generateResponse({file: 'index.js', resourceSize: 1000 * KB, gzipSize: 910 * KB}), // 90kb & 9%
38-
generateResponse({file: 'index.css', resourceSize: 6 * KB, gzipSize: 4.5 * KB}), // 1,5kb & 25% (hit)
39-
generateResponse({file: 'index.json', resourceSize: 10 * KB, gzipSize: 10 * KB}), // 0kb & 0%
26+
generateResponse({file: 'index.js', resourceSize: 1000 * KB, gzipSize: 910 * KB}), // 90kb (hit)
27+
generateResponse({file: 'index.css', resourceSize: 6 * KB, gzipSize: 4.8 * KB}), // 1.2kb
28+
generateResponse({file: 'index2.css', resourceSize: 50 * KB, gzipSize: 37 * KB}), // 13kb (hit)
29+
generateResponse({file: 'index.json', resourceSize: 10 * KB, gzipSize: 10 * KB}), // 0kb
30+
generateResponse({file: 'uncompressed.xcustom', resourceSize: 11 * MB, gzipSize: 10 * MB}), // 1mb (hit)
4031
generateResponse({file: 'compressed.json', resourceSize: 10 * KB, transferSize: 3 * KB,
41-
gzipSize: 6 * KB}), // 0kb & 0%
32+
gzipSize: 6 * KB}), // 0kb
4233
],
4334
});
4435

45-
assert.equal(auditResult.items.length, 1);
36+
expect(auditResult.items.map(item => item.url)).toEqual(
37+
['http://google.com/index.js', 'http://google.com/index2.css', 'http://google.com/uncompressed.xcustom']);
4638
});
4739
});

0 commit comments

Comments
 (0)