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