102 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			102 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | const buffers = [ | ||
|  |   Buffer.from( | ||
|  |     (new Array(100)).fill('').map((_, i) => `key${i}=value${i}`).join('&') | ||
|  |   ), | ||
|  | ]; | ||
|  | const calls = { | ||
|  |   field: 0, | ||
|  |   end: 0, | ||
|  | }; | ||
|  | 
 | ||
|  | let n = 3e3; | ||
|  | 
 | ||
|  | const moduleName = process.argv[2]; | ||
|  | switch (moduleName) { | ||
|  |   case 'busboy': { | ||
|  |     const busboy = require('busboy'); | ||
|  | 
 | ||
|  |     console.time(moduleName); | ||
|  |     (function next() { | ||
|  |       const parser = busboy({ | ||
|  |         limits: { | ||
|  |           fieldSizeLimit: Infinity, | ||
|  |         }, | ||
|  |         headers: { | ||
|  |           'content-type': 'application/x-www-form-urlencoded; charset=utf-8', | ||
|  |         }, | ||
|  |       }); | ||
|  |       parser.on('field', (name, val, info) => { | ||
|  |         ++calls.field; | ||
|  |       }).on('close', () => { | ||
|  |         ++calls.end; | ||
|  |         if (--n === 0) | ||
|  |           console.timeEnd(moduleName); | ||
|  |         else | ||
|  |           process.nextTick(next); | ||
|  |       }); | ||
|  | 
 | ||
|  |       for (const buf of buffers) | ||
|  |         parser.write(buf); | ||
|  |       parser.end(); | ||
|  |     })(); | ||
|  |     break; | ||
|  |   } | ||
|  | 
 | ||
|  |   case 'formidable': { | ||
|  |     const QuerystringParser = | ||
|  |       require('formidable/src/parsers/Querystring.js'); | ||
|  | 
 | ||
|  |     console.time(moduleName); | ||
|  |     (function next() { | ||
|  |       const parser = new QuerystringParser(); | ||
|  |       parser.on('data', (obj) => { | ||
|  |         ++calls.field; | ||
|  |       }).on('end', () => { | ||
|  |         ++calls.end; | ||
|  |         if (--n === 0) | ||
|  |           console.timeEnd(moduleName); | ||
|  |         else | ||
|  |           process.nextTick(next); | ||
|  |       }); | ||
|  | 
 | ||
|  |       for (const buf of buffers) | ||
|  |         parser.write(buf); | ||
|  |       parser.end(); | ||
|  |     })(); | ||
|  |     break; | ||
|  |   } | ||
|  | 
 | ||
|  |   case 'formidable-streaming': { | ||
|  |     const QuerystringParser = | ||
|  |       require('formidable/src/parsers/StreamingQuerystring.js'); | ||
|  | 
 | ||
|  |     console.time(moduleName); | ||
|  |     (function next() { | ||
|  |       const parser = new QuerystringParser(); | ||
|  |       parser.on('data', (obj) => { | ||
|  |         ++calls.field; | ||
|  |       }).on('end', () => { | ||
|  |         ++calls.end; | ||
|  |         if (--n === 0) | ||
|  |           console.timeEnd(moduleName); | ||
|  |         else | ||
|  |           process.nextTick(next); | ||
|  |       }); | ||
|  | 
 | ||
|  |       for (const buf of buffers) | ||
|  |         parser.write(buf); | ||
|  |       parser.end(); | ||
|  |     })(); | ||
|  |     break; | ||
|  |   } | ||
|  | 
 | ||
|  |   default: | ||
|  |     if (moduleName === undefined) | ||
|  |       console.error('Missing parser module name'); | ||
|  |     else | ||
|  |       console.error(`Invalid parser module name: ${moduleName}`); | ||
|  |     process.exit(1); | ||
|  | } |