You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					102 lines
				
				2.2 KiB
			
		
		
			
		
	
	
					102 lines
				
				2.2 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'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);
							 | 
						||
| 
								 | 
							
								}
							 |