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