keeweb/app/scripts/comp/app/start-profiler.js

55 lines
1.3 KiB
JavaScript
Raw Normal View History

2020-03-29 09:23:49 +02:00
import { Logger } from 'util/logger';
const logger = new Logger('start-profiler');
2020-03-29 11:11:16 +02:00
let lastTs = 0;
2020-03-29 09:23:49 +02:00
2020-03-29 11:06:05 +02:00
const operations = [];
2020-03-29 09:23:49 +02:00
const StartProfiler = {
milestone(name) {
const ts = logger.ts();
const elapsed = ts - lastTs;
lastTs = ts;
operations.push({ name, elapsed });
},
report() {
2020-03-29 11:06:05 +02:00
const networkTime = this.getNetworkTime();
2020-03-29 11:11:16 +02:00
operations.unshift({ name: 'fetching', elapsed: networkTime });
2020-03-29 11:06:05 +02:00
2020-03-29 09:23:49 +02:00
const time = Math.round(performance.now());
2020-03-29 10:59:40 +02:00
this.printReport('App', operations, time);
2020-03-29 10:59:40 +02:00
},
reportAppProfile(data) {
this.printReport('Electron app', data.timings, data.totalTime);
},
printReport(name, operations, totalTime) {
const message =
`${name} started in ${totalTime}ms: ` +
2020-06-01 16:53:51 +02:00
operations.map((op) => `${op.name}=${Math.round(op.elapsed)}ms`).join(', ');
logger.info(message);
2020-03-29 11:06:05 +02:00
},
2020-03-29 09:23:49 +02:00
2020-03-29 11:06:05 +02:00
getNetworkTime() {
let perfEntry;
2020-03-29 09:55:17 +02:00
2020-03-29 11:06:05 +02:00
if (performance.getEntriesByType) {
[perfEntry] = performance.getEntriesByType('navigation');
}
if (!perfEntry || !perfEntry.responseEnd || !perfEntry.fetchStart) {
perfEntry = performance.timing;
}
2020-03-29 09:55:17 +02:00
2020-03-29 11:06:05 +02:00
return perfEntry.responseEnd - perfEntry.fetchStart;
}
};
2020-03-29 09:55:17 +02:00
2020-03-29 09:23:49 +02:00
StartProfiler.milestone('pre-init');
export { StartProfiler };