• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3const buffers = [
4  Buffer.from(
5    (new Array(900)).fill('').map((_, i) => `key${i}=value${i}`).join('&')
6  ),
7];
8const calls = {
9  field: 0,
10  end: 0,
11};
12
13const moduleName = process.argv[2];
14switch (moduleName) {
15  case 'busboy': {
16    const busboy = require('busboy');
17
18    console.time(moduleName);
19    const parser = busboy({
20      limits: {
21        fieldSizeLimit: Infinity,
22      },
23      headers: {
24        'content-type': 'application/x-www-form-urlencoded; charset=utf-8',
25      },
26    });
27    parser.on('field', (name, val, info) => {
28      ++calls.field;
29    }).on('close', () => {
30      ++calls.end;
31      console.timeEnd(moduleName);
32    });
33
34    for (const buf of buffers)
35      parser.write(buf);
36    parser.end();
37    break;
38  }
39
40  case 'formidable': {
41    const QuerystringParser =
42      require('formidable/src/parsers/Querystring.js');
43
44    console.time(moduleName);
45    const parser = new QuerystringParser();
46    parser.on('data', (obj) => {
47      ++calls.field;
48    }).on('end', () => {
49      ++calls.end;
50      console.timeEnd(moduleName);
51    });
52
53    for (const buf of buffers)
54      parser.write(buf);
55    parser.end();
56    break;
57  }
58
59  case 'formidable-streaming': {
60    const QuerystringParser =
61      require('formidable/src/parsers/StreamingQuerystring.js');
62
63    console.time(moduleName);
64    const parser = new QuerystringParser();
65    parser.on('data', (obj) => {
66      ++calls.field;
67    }).on('end', () => {
68      ++calls.end;
69      console.timeEnd(moduleName);
70    });
71
72    for (const buf of buffers)
73      parser.write(buf);
74    parser.end();
75    break;
76  }
77
78  default:
79    if (moduleName === undefined)
80      console.error('Missing parser module name');
81    else
82      console.error(`Invalid parser module name: ${moduleName}`);
83    process.exit(1);
84}
85