@@ -8,14 +8,27 @@ const table = require('tty-table')
88const ports = { http : 3010 , fastify : 3011 , polka : 3012 , scrud : 3013 , express : 3014 }
99const results = [ ]
1010const benchId = 301
11+ const children = { }
12+ const memory = { }
1113Promise . all ( Object . keys ( ports ) . map ( ( k ) => new Promise ( ( resolve , reject ) => {
12- let child = fork ( join ( __dirname , 'server' ) , [ k ] )
14+ let child = children [ k ] = fork ( join ( __dirname , 'server' ) , [ k ] )
1315 child . once ( 'error' , ( err ) => {
1416 console . log ( err )
1517 process . exit ( )
1618 } )
17- child . once ( 'message' , ( m ) => {
18- ( m === k ) ? resolve ( ) : reject ( m )
19+ let started
20+ let gotMemory
21+ child . on ( 'message' , ( m ) => {
22+ let endMem = m . match ( / ^ e n d M e m ( .* ) / )
23+ if ( endMem ) {
24+ memory [ k ] . end = endMem [ 1 ]
25+ child . kill ( )
26+ }
27+ started = started || m === k
28+ let startMem = m . match ( / ^ s t a r t M e m ( .* ) / )
29+ gotMemory = gotMemory || startMem
30+ if ( startMem ) memory [ k ] = { start : startMem [ 1 ] }
31+ if ( gotMemory && started ) return resolve ( )
1932 } )
2033} ) ) ) . then ( ( ) => bench ( ) )
2134
@@ -37,7 +50,7 @@ const shuffler = (array) => {
3750const formatBytes = ( bytes ) => {
3851 if ( bytes === 0 ) return '0 Byte'
3952 let k = 1000
40- let dm = 3
53+ let dm = 2
4154 let sizes = [ 'Bytes' , 'KB' , 'MB' , 'GB' ]
4255 let i = Math . floor ( Math . log ( bytes ) / Math . log ( k ) )
4356 return parseFloat ( ( bytes / Math . pow ( k , i ) ) . toFixed ( dm ) ) + ' ' + sizes [ i ]
@@ -76,6 +89,11 @@ const checkConsistency = async (name) => {
7689 last = { lib : name , result : tmpRes }
7790}
7891
92+ const getEndMemory = ( name ) => new Promise ( ( resolve , reject ) => {
93+ children [ name ] . on ( 'exit' , ( ) => resolve ( ) )
94+ children [ name ] . send ( 'endMemory' )
95+ } )
96+
7997async function bench ( ) {
8098 console . log ( `servers running, starting benchmarks\n` )
8199 let keys = shuffler ( Object . keys ( ports ) )
@@ -88,16 +106,25 @@ async function bench () {
88106 }
89107 }
90108 for ( let name of keys ) await bencher ( name )
91- let head = [ 'lib' , 'req/sec' , 'latency' , 'throughput' , 'errors' ] . map ( ( h ) => {
92- return { alias : h }
93- } )
109+ for ( let name of keys ) await getEndMemory ( name )
110+ let head = [
111+ 'lib' ,
112+ 'req/sec' ,
113+ 'latency' ,
114+ 'throughput' ,
115+ 'errors' ,
116+ 'memory (start)' ,
117+ 'memory (end)'
118+ ] . map ( ( h ) => { return { alias : h } } )
94119 results . sort ( ( a , b ) => b . requests . average - a . requests . average )
95120 let rows = results . map ( ( r ) => [
96121 r . title ,
97122 r . requests . average ,
98123 r . latency . average ,
99124 formatBytes ( r . throughput . average ) ,
100- r . errors + r . non2xx
125+ r . errors + r . non2xx ,
126+ memory [ r . title ] . start . split ( '/' ) . map ( formatBytes ) . join ( '\n' ) ,
127+ memory [ r . title ] . end . split ( '/' ) . map ( formatBytes ) . join ( '\n' )
101128 ] )
102129 console . log ( table ( head , rows ) . render ( ) )
103130 process . exit ( )
0 commit comments