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.
		
		
		
		
		
			
		
			
				
					86 lines
				
				1.9 KiB
			
		
		
			
		
	
	
					86 lines
				
				1.9 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const bench = require('fastbench') | ||
|  | const SonicBoom = require('sonic-boom') | ||
|  | const ThreadStream = require('.') | ||
|  | const Console = require('console').Console | ||
|  | const fs = require('fs') | ||
|  | const { join } = require('path') | ||
|  | 
 | ||
|  | const core = fs.createWriteStream('/dev/null') | ||
|  | const fd = fs.openSync('/dev/null', 'w') | ||
|  | const sonic = new SonicBoom({ fd }) | ||
|  | const sonicSync = new SonicBoom({ fd, sync: true }) | ||
|  | const out = fs.createWriteStream('/dev/null') | ||
|  | const dummyConsole = new Console(out) | ||
|  | const threadStreamSync = new ThreadStream({ | ||
|  |   filename: join(__dirname, 'test', 'to-file.js'), | ||
|  |   workerData: { dest: '/dev/null' }, | ||
|  |   bufferSize: 4 * 1024 * 1024, | ||
|  |   sync: true | ||
|  | }) | ||
|  | const threadStreamAsync = new ThreadStream({ | ||
|  |   filename: join(__dirname, 'test', 'to-file.js'), | ||
|  |   workerData: { dest: '/dev/null' }, | ||
|  |   bufferSize: 4 * 1024 * 1024, | ||
|  |   sync: false | ||
|  | }) | ||
|  | 
 | ||
|  | const MAX = 10000 | ||
|  | 
 | ||
|  | let str = '' | ||
|  | 
 | ||
|  | for (let i = 0; i < 10; i++) { | ||
|  |   str += 'hello' | ||
|  | } | ||
|  | 
 | ||
|  | setTimeout(doBench, 100) | ||
|  | 
 | ||
|  | const run = bench([ | ||
|  |   function benchThreadStreamSync (cb) { | ||
|  |     for (let i = 0; i < MAX; i++) { | ||
|  |       threadStreamSync.write(str) | ||
|  |     } | ||
|  |     setImmediate(cb) | ||
|  |   }, | ||
|  |   function benchThreadStreamAsync (cb) { | ||
|  |     threadStreamAsync.once('drain', cb) | ||
|  |     for (let i = 0; i < MAX; i++) { | ||
|  |       threadStreamAsync.write(str) | ||
|  |     } | ||
|  |   }, | ||
|  |   function benchSonic (cb) { | ||
|  |     sonic.once('drain', cb) | ||
|  |     for (let i = 0; i < MAX; i++) { | ||
|  |       sonic.write(str) | ||
|  |     } | ||
|  |   }, | ||
|  |   function benchSonicSync (cb) { | ||
|  |     sonicSync.once('drain', cb) | ||
|  |     for (let i = 0; i < MAX; i++) { | ||
|  |       sonicSync.write(str) | ||
|  |     } | ||
|  |   }, | ||
|  |   function benchCore (cb) { | ||
|  |     core.once('drain', cb) | ||
|  |     for (let i = 0; i < MAX; i++) { | ||
|  |       core.write(str) | ||
|  |     } | ||
|  |   }, | ||
|  |   function benchConsole (cb) { | ||
|  |     for (let i = 0; i < MAX; i++) { | ||
|  |       dummyConsole.log(str) | ||
|  |     } | ||
|  |     setImmediate(cb) | ||
|  |   } | ||
|  | ], 1000) | ||
|  | 
 | ||
|  | function doBench () { | ||
|  |   run(function () { | ||
|  |     run(function () { | ||
|  |       // TODO figure out why it does not shut down
 | ||
|  |       process.exit(0) | ||
|  |     }) | ||
|  |   }) | ||
|  | } |