-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathindex.js
126 lines (120 loc) · 3.36 KB
/
index.js
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
'use strict';
const fs = require('fs');
const path = require('path');
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
const Aggregator = require('./aggregator');
const DEFAULT_SUMMARY_METRICS = [
'criticalrequestchains',
'firstmeaningfulpaint',
'speedindexmetric',
'estimatedinputlatency',
'firstinteractive',
'consistentlyinteractive'
];
const PORT = '9222';
const flags = {
port: PORT,
chromeFlags: [
`--remote-debugging-port=${PORT}`,
//‘--disable-web-security’,
//‘--disable-device-discovery-notifications’,
//‘--acceptSslCerts’,
'--no-sandbox',
//‘--ignore-certificate-errors’,
'--headless',
'--disable-gpu'
]
};
function launchChromeAndRunLighthouse(url, flags = {}, config = null) {
return chromeLauncher.launch(flags).then(chrome => {
return lighthouse(url, flags, config).then(results =>
chrome.kill().then(() => results)
);
});
}
module.exports = {
name() {
return 'lighthouse';
},
open(context) {
this.make = context.messageMaker('lighthouse').make;
this.log = context.intel.getLogger('sitespeedio.plugin.lighthouse');
context.filterRegistry.registerFilterForType(
DEFAULT_SUMMARY_METRICS,
'lighthouse.summary'
);
this.pug = fs.readFileSync(
path.resolve(__dirname, 'pug', 'index.pug'),
'utf8'
);
this.aggregator = new Aggregator(context.statsHelpers);
},
processMessage(message, queue) {
const make = this.make;
const log = this.log;
const aggregator = this.aggregator;
switch (message.type) {
case 'sitespeedio.setup': {
queue.postMessage(
make('html.pug', {
id: 'lighthouse',
name: 'Lighthouse',
pug: this.pug,
type: 'pageSummary'
})
);
break;
}
case 'url': {
const config = {
passes: [
{
recordTrace: true,
pauseAfterLoadMs: 5250,
networkQuietThresholdMs: 5250,
cpuQuietThresholdMs: 5250,
useThrottling: true,
gatherers: []
}
],
audits: [
'critical-request-chains',
'first-meaningful-paint',
'speed-index-metric',
'estimated-input-latency',
'first-interactive',
'consistently-interactive'
]
};
const url = message.url;
const group = message.group;
log.info('Collecting Lighthouse result');
return launchChromeAndRunLighthouse(url, flags, config)
.then(results => {
aggregator.addToAggregate(results.audits, group);
const summary = aggregator.summarize();
if (summary) {
for (let group of Object.keys(summary.groups)) {
queue.postMessage(
make('lighthouse.pageSummary', summary.groups[group], {
url,
group
})
);
}
}
log.info('Finished collecting Lighthouse result');
})
.catch(err => {
log.error('Error creating Lighthouse result ', err);
queue.postMessage(
make('error', err, {
url
})
);
});
}
}
}
};