• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3const fs = require('fs');
4const format = require('human-format');
5const promisifyEvent = require('promisify-event');
6const memwatch = require('node-memwatch');
7const SAXParser = require('../../packages/parse5-sax-parser/lib');
8
9main();
10
11async function main() {
12    let parsedDataSize = 0;
13    let maxMemUsage = 0;
14    let startDate = null;
15    let endDate = null;
16    const heapDiffMeasurement = new memwatch.HeapDiff();
17    let heapDiff = null;
18
19    memwatch.on('stats', stats => {
20        maxMemUsage = Math.max(maxMemUsage, stats['current_base']);
21    });
22
23    startDate = new Date();
24
25    const parserPromise = parse().then(dataSize => {
26        parsedDataSize = dataSize;
27        endDate = new Date();
28        heapDiff = heapDiffMeasurement.end();
29    });
30
31    await Promise.all([
32        parserPromise,
33        promisifyEvent(memwatch, 'stats') // NOTE: we need at least one `stats` result
34    ]);
35
36    printResults(parsedDataSize, startDate, endDate, heapDiff, maxMemUsage);
37}
38
39async function parse() {
40    const data = fs.readFileSync('../test/data/huge-page/huge-page.html', 'utf8');
41    let parsedDataSize = 0;
42    const stream = new SAXParser();
43
44    for (let i = 0; i < 200; i++) {
45        parsedDataSize += data.length;
46        stream.write(data);
47    }
48
49    stream.end();
50
51    await promisifyEvent(stream, 'finish');
52
53    return parsedDataSize;
54}
55
56function getDuration(startDate, endDate) {
57    const scale = new format.Scale({
58        seconds: 1,
59        minutes: 60,
60        hours: 3600
61    });
62
63    return format((endDate - startDate) / 1000, { scale: scale });
64}
65
66function printResults(parsedDataSize, startDate, endDate, heapDiff, maxMemUsage) {
67    console.log('Input data size:', format(parsedDataSize, { unit: 'B' }));
68    console.log('Duration: ', getDuration(startDate, endDate));
69    console.log('Memory before: ', heapDiff.before.size);
70    console.log('Memory after: ', heapDiff.after.size);
71    console.log('Memory max: ', format(maxMemUsage, { unit: 'B' }));
72}
73