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