summaryrefslogtreecommitdiff
path: root/node_modules/busboy/bench
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2023-09-02 19:12:47 -0400
committersowgro <tpoke.ferrari@gmail.com>2023-09-02 19:12:47 -0400
commite4450c8417624b71d779cb4f41692538f9165e10 (patch)
treeb70826542223ecdf8a7a259f61b0a1abb8a217d8 /node_modules/busboy/bench
downloadsowbot3-e4450c8417624b71d779cb4f41692538f9165e10.tar.gz
sowbot3-e4450c8417624b71d779cb4f41692538f9165e10.tar.bz2
sowbot3-e4450c8417624b71d779cb4f41692538f9165e10.zip
first commit
Diffstat (limited to 'node_modules/busboy/bench')
-rw-r--r--node_modules/busboy/bench/bench-multipart-fields-100mb-big.js149
-rw-r--r--node_modules/busboy/bench/bench-multipart-fields-100mb-small.js143
-rw-r--r--node_modules/busboy/bench/bench-multipart-files-100mb-big.js154
-rw-r--r--node_modules/busboy/bench/bench-multipart-files-100mb-small.js148
-rw-r--r--node_modules/busboy/bench/bench-urlencoded-fields-100pairs-small.js101
-rw-r--r--node_modules/busboy/bench/bench-urlencoded-fields-900pairs-small-alt.js84
6 files changed, 779 insertions, 0 deletions
diff --git a/node_modules/busboy/bench/bench-multipart-fields-100mb-big.js b/node_modules/busboy/bench/bench-multipart-fields-100mb-big.js
new file mode 100644
index 0000000..ef15729
--- /dev/null
+++ b/node_modules/busboy/bench/bench-multipart-fields-100mb-big.js
@@ -0,0 +1,149 @@
+'use strict';
+
+function createMultipartBuffers(boundary, sizes) {
+ const bufs = [];
+ for (let i = 0; i < sizes.length; ++i) {
+ const mb = sizes[i] * 1024 * 1024;
+ bufs.push(Buffer.from([
+ `--${boundary}`,
+ `content-disposition: form-data; name="field${i + 1}"`,
+ '',
+ '0'.repeat(mb),
+ '',
+ ].join('\r\n')));
+ }
+ bufs.push(Buffer.from([
+ `--${boundary}--`,
+ '',
+ ].join('\r\n')));
+ return bufs;
+}
+
+const boundary = '-----------------------------168072824752491622650073';
+const buffers = createMultipartBuffers(boundary, [
+ 10,
+ 10,
+ 10,
+ 20,
+ 50,
+]);
+const calls = {
+ partBegin: 0,
+ headerField: 0,
+ headerValue: 0,
+ headerEnd: 0,
+ headersEnd: 0,
+ partData: 0,
+ partEnd: 0,
+ end: 0,
+};
+
+const moduleName = process.argv[2];
+switch (moduleName) {
+ case 'busboy': {
+ const busboy = require('busboy');
+
+ const parser = busboy({
+ limits: {
+ fieldSizeLimit: Infinity,
+ },
+ headers: {
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
+ },
+ });
+ parser.on('field', (name, val, info) => {
+ ++calls.partBegin;
+ ++calls.partData;
+ ++calls.partEnd;
+ }).on('close', () => {
+ ++calls.end;
+ console.timeEnd(moduleName);
+ });
+
+ console.time(moduleName);
+ for (const buf of buffers)
+ parser.write(buf);
+ break;
+ }
+
+ case 'formidable': {
+ const { MultipartParser } = require('formidable');
+
+ const parser = new MultipartParser();
+ parser.initWithBoundary(boundary);
+ parser.on('data', ({ name }) => {
+ ++calls[name];
+ if (name === 'end')
+ console.timeEnd(moduleName);
+ });
+
+ console.time(moduleName);
+ for (const buf of buffers)
+ parser.write(buf);
+
+ break;
+ }
+
+ case 'multiparty': {
+ const { Readable } = require('stream');
+
+ const { Form } = require('multiparty');
+
+ const form = new Form({
+ maxFieldsSize: Infinity,
+ maxFields: Infinity,
+ maxFilesSize: Infinity,
+ autoFields: false,
+ autoFiles: false,
+ });
+
+ const req = new Readable({ read: () => {} });
+ req.headers = {
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
+ };
+
+ function hijack(name, fn) {
+ const oldFn = form[name];
+ form[name] = function() {
+ fn();
+ return oldFn.apply(this, arguments);
+ };
+ }
+
+ hijack('onParseHeaderField', () => {
+ ++calls.headerField;
+ });
+ hijack('onParseHeaderValue', () => {
+ ++calls.headerValue;
+ });
+ hijack('onParsePartBegin', () => {
+ ++calls.partBegin;
+ });
+ hijack('onParsePartData', () => {
+ ++calls.partData;
+ });
+ hijack('onParsePartEnd', () => {
+ ++calls.partEnd;
+ });
+
+ form.on('close', () => {
+ ++calls.end;
+ console.timeEnd(moduleName);
+ }).on('part', (p) => p.resume());
+
+ console.time(moduleName);
+ form.parse(req);
+ for (const buf of buffers)
+ req.push(buf);
+ req.push(null);
+
+ break;
+ }
+
+ default:
+ if (moduleName === undefined)
+ console.error('Missing parser module name');
+ else
+ console.error(`Invalid parser module name: ${moduleName}`);
+ process.exit(1);
+}
diff --git a/node_modules/busboy/bench/bench-multipart-fields-100mb-small.js b/node_modules/busboy/bench/bench-multipart-fields-100mb-small.js
new file mode 100644
index 0000000..f32d421
--- /dev/null
+++ b/node_modules/busboy/bench/bench-multipart-fields-100mb-small.js
@@ -0,0 +1,143 @@
+'use strict';
+
+function createMultipartBuffers(boundary, sizes) {
+ const bufs = [];
+ for (let i = 0; i < sizes.length; ++i) {
+ const mb = sizes[i] * 1024 * 1024;
+ bufs.push(Buffer.from([
+ `--${boundary}`,
+ `content-disposition: form-data; name="field${i + 1}"`,
+ '',
+ '0'.repeat(mb),
+ '',
+ ].join('\r\n')));
+ }
+ bufs.push(Buffer.from([
+ `--${boundary}--`,
+ '',
+ ].join('\r\n')));
+ return bufs;
+}
+
+const boundary = '-----------------------------168072824752491622650073';
+const buffers = createMultipartBuffers(boundary, (new Array(100)).fill(1));
+const calls = {
+ partBegin: 0,
+ headerField: 0,
+ headerValue: 0,
+ headerEnd: 0,
+ headersEnd: 0,
+ partData: 0,
+ partEnd: 0,
+ end: 0,
+};
+
+const moduleName = process.argv[2];
+switch (moduleName) {
+ case 'busboy': {
+ const busboy = require('busboy');
+
+ const parser = busboy({
+ limits: {
+ fieldSizeLimit: Infinity,
+ },
+ headers: {
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
+ },
+ });
+ parser.on('field', (name, val, info) => {
+ ++calls.partBegin;
+ ++calls.partData;
+ ++calls.partEnd;
+ }).on('close', () => {
+ ++calls.end;
+ console.timeEnd(moduleName);
+ });
+
+ console.time(moduleName);
+ for (const buf of buffers)
+ parser.write(buf);
+ break;
+ }
+
+ case 'formidable': {
+ const { MultipartParser } = require('formidable');
+
+ const parser = new MultipartParser();
+ parser.initWithBoundary(boundary);
+ parser.on('data', ({ name }) => {
+ ++calls[name];
+ if (name === 'end')
+ console.timeEnd(moduleName);
+ });
+
+ console.time(moduleName);
+ for (const buf of buffers)
+ parser.write(buf);
+
+ break;
+ }
+
+ case 'multiparty': {
+ const { Readable } = require('stream');
+
+ const { Form } = require('multiparty');
+
+ const form = new Form({
+ maxFieldsSize: Infinity,
+ maxFields: Infinity,
+ maxFilesSize: Infinity,
+ autoFields: false,
+ autoFiles: false,
+ });
+
+ const req = new Readable({ read: () => {} });
+ req.headers = {
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
+ };
+
+ function hijack(name, fn) {
+ const oldFn = form[name];
+ form[name] = function() {
+ fn();
+ return oldFn.apply(this, arguments);
+ };
+ }
+
+ hijack('onParseHeaderField', () => {
+ ++calls.headerField;
+ });
+ hijack('onParseHeaderValue', () => {
+ ++calls.headerValue;
+ });
+ hijack('onParsePartBegin', () => {
+ ++calls.partBegin;
+ });
+ hijack('onParsePartData', () => {
+ ++calls.partData;
+ });
+ hijack('onParsePartEnd', () => {
+ ++calls.partEnd;
+ });
+
+ form.on('close', () => {
+ ++calls.end;
+ console.timeEnd(moduleName);
+ }).on('part', (p) => p.resume());
+
+ console.time(moduleName);
+ form.parse(req);
+ for (const buf of buffers)
+ req.push(buf);
+ req.push(null);
+
+ break;
+ }
+
+ default:
+ if (moduleName === undefined)
+ console.error('Missing parser module name');
+ else
+ console.error(`Invalid parser module name: ${moduleName}`);
+ process.exit(1);
+}
diff --git a/node_modules/busboy/bench/bench-multipart-files-100mb-big.js b/node_modules/busboy/bench/bench-multipart-files-100mb-big.js
new file mode 100644
index 0000000..b46bdee
--- /dev/null
+++ b/node_modules/busboy/bench/bench-multipart-files-100mb-big.js
@@ -0,0 +1,154 @@
+'use strict';
+
+function createMultipartBuffers(boundary, sizes) {
+ const bufs = [];
+ for (let i = 0; i < sizes.length; ++i) {
+ const mb = sizes[i] * 1024 * 1024;
+ bufs.push(Buffer.from([
+ `--${boundary}`,
+ `content-disposition: form-data; name="file${i + 1}"; `
+ + `filename="random${i + 1}.bin"`,
+ 'content-type: application/octet-stream',
+ '',
+ '0'.repeat(mb),
+ '',
+ ].join('\r\n')));
+ }
+ bufs.push(Buffer.from([
+ `--${boundary}--`,
+ '',
+ ].join('\r\n')));
+ return bufs;
+}
+
+const boundary = '-----------------------------168072824752491622650073';
+const buffers = createMultipartBuffers(boundary, [
+ 10,
+ 10,
+ 10,
+ 20,
+ 50,
+]);
+const calls = {
+ partBegin: 0,
+ headerField: 0,
+ headerValue: 0,
+ headerEnd: 0,
+ headersEnd: 0,
+ partData: 0,
+ partEnd: 0,
+ end: 0,
+};
+
+const moduleName = process.argv[2];
+switch (moduleName) {
+ case 'busboy': {
+ const busboy = require('busboy');
+
+ const parser = busboy({
+ limits: {
+ fieldSizeLimit: Infinity,
+ },
+ headers: {
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
+ },
+ });
+ parser.on('file', (name, stream, info) => {
+ ++calls.partBegin;
+ stream.on('data', (chunk) => {
+ ++calls.partData;
+ }).on('end', () => {
+ ++calls.partEnd;
+ });
+ }).on('close', () => {
+ ++calls.end;
+ console.timeEnd(moduleName);
+ });
+
+ console.time(moduleName);
+ for (const buf of buffers)
+ parser.write(buf);
+ break;
+ }
+
+ case 'formidable': {
+ const { MultipartParser } = require('formidable');
+
+ const parser = new MultipartParser();
+ parser.initWithBoundary(boundary);
+ parser.on('data', ({ name }) => {
+ ++calls[name];
+ if (name === 'end')
+ console.timeEnd(moduleName);
+ });
+
+ console.time(moduleName);
+ for (const buf of buffers)
+ parser.write(buf);
+
+ break;
+ }
+
+ case 'multiparty': {
+ const { Readable } = require('stream');
+
+ const { Form } = require('multiparty');
+
+ const form = new Form({
+ maxFieldsSize: Infinity,
+ maxFields: Infinity,
+ maxFilesSize: Infinity,
+ autoFields: false,
+ autoFiles: false,
+ });
+
+ const req = new Readable({ read: () => {} });
+ req.headers = {
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
+ };
+
+ function hijack(name, fn) {
+ const oldFn = form[name];
+ form[name] = function() {
+ fn();
+ return oldFn.apply(this, arguments);
+ };
+ }
+
+ hijack('onParseHeaderField', () => {
+ ++calls.headerField;
+ });
+ hijack('onParseHeaderValue', () => {
+ ++calls.headerValue;
+ });
+ hijack('onParsePartBegin', () => {
+ ++calls.partBegin;
+ });
+ hijack('onParsePartData', () => {
+ ++calls.partData;
+ });
+ hijack('onParsePartEnd', () => {
+ ++calls.partEnd;
+ });
+
+ form.on('close', () => {
+ ++calls.end;
+ console.timeEnd(moduleName);
+ }).on('part', (p) => p.resume());
+
+ console.time(moduleName);
+ form.parse(req);
+ for (const buf of buffers)
+ req.push(buf);
+ req.push(null);
+
+ break;
+ }
+
+ default:
+ if (moduleName === undefined)
+ console.error('Missing parser module name');
+ else
+ console.error(`Invalid parser module name: ${moduleName}`);
+ process.exit(1);
+}
diff --git a/node_modules/busboy/bench/bench-multipart-files-100mb-small.js b/node_modules/busboy/bench/bench-multipart-files-100mb-small.js
new file mode 100644
index 0000000..46b5dff
--- /dev/null
+++ b/node_modules/busboy/bench/bench-multipart-files-100mb-small.js
@@ -0,0 +1,148 @@
+'use strict';
+
+function createMultipartBuffers(boundary, sizes) {
+ const bufs = [];
+ for (let i = 0; i < sizes.length; ++i) {
+ const mb = sizes[i] * 1024 * 1024;
+ bufs.push(Buffer.from([
+ `--${boundary}`,
+ `content-disposition: form-data; name="file${i + 1}"; `
+ + `filename="random${i + 1}.bin"`,
+ 'content-type: application/octet-stream',
+ '',
+ '0'.repeat(mb),
+ '',
+ ].join('\r\n')));
+ }
+ bufs.push(Buffer.from([
+ `--${boundary}--`,
+ '',
+ ].join('\r\n')));
+ return bufs;
+}
+
+const boundary = '-----------------------------168072824752491622650073';
+const buffers = createMultipartBuffers(boundary, (new Array(100)).fill(1));
+const calls = {
+ partBegin: 0,
+ headerField: 0,
+ headerValue: 0,
+ headerEnd: 0,
+ headersEnd: 0,
+ partData: 0,
+ partEnd: 0,
+ end: 0,
+};
+
+const moduleName = process.argv[2];
+switch (moduleName) {
+ case 'busboy': {
+ const busboy = require('busboy');
+
+ const parser = busboy({
+ limits: {
+ fieldSizeLimit: Infinity,
+ },
+ headers: {
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
+ },
+ });
+ parser.on('file', (name, stream, info) => {
+ ++calls.partBegin;
+ stream.on('data', (chunk) => {
+ ++calls.partData;
+ }).on('end', () => {
+ ++calls.partEnd;
+ });
+ }).on('close', () => {
+ ++calls.end;
+ console.timeEnd(moduleName);
+ });
+
+ console.time(moduleName);
+ for (const buf of buffers)
+ parser.write(buf);
+ break;
+ }
+
+ case 'formidable': {
+ const { MultipartParser } = require('formidable');
+
+ const parser = new MultipartParser();
+ parser.initWithBoundary(boundary);
+ parser.on('data', ({ name }) => {
+ ++calls[name];
+ if (name === 'end')
+ console.timeEnd(moduleName);
+ });
+
+ console.time(moduleName);
+ for (const buf of buffers)
+ parser.write(buf);
+
+ break;
+ }
+
+ case 'multiparty': {
+ const { Readable } = require('stream');
+
+ const { Form } = require('multiparty');
+
+ const form = new Form({
+ maxFieldsSize: Infinity,
+ maxFields: Infinity,
+ maxFilesSize: Infinity,
+ autoFields: false,
+ autoFiles: false,
+ });
+
+ const req = new Readable({ read: () => {} });
+ req.headers = {
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
+ };
+
+ function hijack(name, fn) {
+ const oldFn = form[name];
+ form[name] = function() {
+ fn();
+ return oldFn.apply(this, arguments);
+ };
+ }
+
+ hijack('onParseHeaderField', () => {
+ ++calls.headerField;
+ });
+ hijack('onParseHeaderValue', () => {
+ ++calls.headerValue;
+ });
+ hijack('onParsePartBegin', () => {
+ ++calls.partBegin;
+ });
+ hijack('onParsePartData', () => {
+ ++calls.partData;
+ });
+ hijack('onParsePartEnd', () => {
+ ++calls.partEnd;
+ });
+
+ form.on('close', () => {
+ ++calls.end;
+ console.timeEnd(moduleName);
+ }).on('part', (p) => p.resume());
+
+ console.time(moduleName);
+ form.parse(req);
+ for (const buf of buffers)
+ req.push(buf);
+ req.push(null);
+
+ break;
+ }
+
+ default:
+ if (moduleName === undefined)
+ console.error('Missing parser module name');
+ else
+ console.error(`Invalid parser module name: ${moduleName}`);
+ process.exit(1);
+}
diff --git a/node_modules/busboy/bench/bench-urlencoded-fields-100pairs-small.js b/node_modules/busboy/bench/bench-urlencoded-fields-100pairs-small.js
new file mode 100644
index 0000000..5c337df
--- /dev/null
+++ b/node_modules/busboy/bench/bench-urlencoded-fields-100pairs-small.js
@@ -0,0 +1,101 @@
+'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);
+}
diff --git a/node_modules/busboy/bench/bench-urlencoded-fields-900pairs-small-alt.js b/node_modules/busboy/bench/bench-urlencoded-fields-900pairs-small-alt.js
new file mode 100644
index 0000000..1f5645c
--- /dev/null
+++ b/node_modules/busboy/bench/bench-urlencoded-fields-900pairs-small-alt.js
@@ -0,0 +1,84 @@
+'use strict';
+
+const buffers = [
+ Buffer.from(
+ (new Array(900)).fill('').map((_, i) => `key${i}=value${i}`).join('&')
+ ),
+];
+const calls = {
+ field: 0,
+ end: 0,
+};
+
+const moduleName = process.argv[2];
+switch (moduleName) {
+ case 'busboy': {
+ const busboy = require('busboy');
+
+ console.time(moduleName);
+ 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;
+ console.timeEnd(moduleName);
+ });
+
+ for (const buf of buffers)
+ parser.write(buf);
+ parser.end();
+ break;
+ }
+
+ case 'formidable': {
+ const QuerystringParser =
+ require('formidable/src/parsers/Querystring.js');
+
+ console.time(moduleName);
+ const parser = new QuerystringParser();
+ parser.on('data', (obj) => {
+ ++calls.field;
+ }).on('end', () => {
+ ++calls.end;
+ console.timeEnd(moduleName);
+ });
+
+ 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);
+ const parser = new QuerystringParser();
+ parser.on('data', (obj) => {
+ ++calls.field;
+ }).on('end', () => {
+ ++calls.end;
+ console.timeEnd(moduleName);
+ });
+
+ 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);
+}