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);
 | |
| }
 |