PerfHandler.ts
1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import {PrefReport, PrefReportResource} from '../libs/PrefReport';
import Handler from './Handler';
import createLog from '../utils/Log';
const log = createLog('pref');
class PrefHandler extends Handler<PrefReport> {
start() {
log('start');
window.addEventListener && window.addEventListener('load', this.onLoad.bind(this), false);
}
onLoad() {
log('onload');
const rd = new PrefReport();
if (window.performance && window.performance.timing) {
this.collectTimeing(rd);
this.collectResources(rd);
} else {
rd.low = true;
}
this.send(rd);
}
collectTimeing(rd: PrefReport) {
const timing = window.performance.timing;
rd.dns = timing.domainLookupEnd - timing.domainLookupStart;
rd.tcp = timing.connectEnd - timing.connectStart;
rd.redirect = timing.redirectEnd - timing.redirectStart;
rd.req = timing.responseStart - timing.requestStart;
rd.res = timing.responseEnd - timing.responseStart;
rd.dom = timing.domComplete - timing.domInteractive;
rd.white = timing.responseStart - timing.navigationStart;
rd.ready = timing.domContentLoadedEventEnd - timing.navigationStart;
}
collectResources(rd: PrefReport) {
if (window.performance.getEntries) {
const entries = window.performance.getEntries();
rd.resources = entries
.filter(({name}) => /https?:\/\/cdn\.yoho\.cn/.test(name))
.map(e => new PrefReportResource(e.name, e.duration));
}
}
}
export default PrefHandler;