1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | import { initMetric } from './lib/initMetric.js';
|
17 | import { observe } from './lib/observe.js';
|
18 | import { onHidden } from './lib/onHidden.js';
|
19 | import { onBFCacheRestore } from './lib/onBFCacheRestore.js';
|
20 | import { bindReporter } from './lib/bindReporter.js';
|
21 | export const getCLS = (onReport, reportAllChanges) => {
|
22 | let metric = initMetric('CLS', 0);
|
23 | let report;
|
24 | const entryHandler = (entry) => {
|
25 |
|
26 | if (!entry.hadRecentInput) {
|
27 | metric.value += entry.value;
|
28 | metric.entries.push(entry);
|
29 | report();
|
30 | }
|
31 | };
|
32 | const po = observe('layout-shift', entryHandler);
|
33 | if (po) {
|
34 | report = bindReporter(onReport, metric, reportAllChanges);
|
35 | onHidden(() => {
|
36 | po.takeRecords().map(entryHandler);
|
37 | report();
|
38 | });
|
39 | onBFCacheRestore(() => {
|
40 | metric = initMetric('CLS', 0);
|
41 | report = bindReporter(onReport, metric, reportAllChanges);
|
42 | });
|
43 | }
|
44 | };
|