@@ -17,31 +17,36 @@ const results = []
1717const benchId = 301
1818const children = { }
1919const memory = { }
20- let lob = process . argv [ 2 ] === '--lob' || process . argv [ 2 ] === 'lob'
20+
21+ const lob = process . argv [ 2 ] === '--lob' || process . argv [ 2 ] === 'lob'
22+
2123Promise . all ( Object . keys ( ports ) . map ( ( k ) => new Promise ( ( resolve , reject ) => {
22- let child = children [ k ] = fork ( join ( __dirname , 'server' ) , [ k , lob ? 'lob' : '' ] )
24+ const child = children [ k ] = fork ( join ( __dirname , 'server' ) , [ k , lob ? 'lob' : '' ] )
2325 child . once ( 'error' , ( err ) => {
2426 console . log ( err )
2527 process . exit ( )
2628 } )
29+
2730 let started
2831 let gotMemory
2932 child . on ( 'message' , ( m ) => {
30- let endMem = m . match ( / ^ e n d M e m ( .* ) / )
33+ const endMem = m . match ( / ^ e n d M e m ( .* ) / )
3134 if ( endMem ) {
3235 memory [ k ] . end = endMem [ 1 ]
3336 child . kill ( )
3437 }
38+
3539 started = started || m === k
36- let startMem = m . match ( / ^ s t a r t M e m ( .* ) / )
40+ const startMem = m . match ( / ^ s t a r t M e m ( .* ) / )
3741 gotMemory = gotMemory || startMem
38- if ( startMem ) memory [ k ] = { start : startMem [ 1 ] }
42+
43+ if ( startMem ) memory [ k ] = { start : startMem [ 1 ] }
3944 if ( gotMemory && started ) return resolve ( )
4045 } )
4146} ) ) ) . then ( ( ) => bench ( ) )
4247
4348const urlTemplate = ( port , string ) => {
44- let url = { host : 'localhost' , port, path : `/bench/${ benchId } ` }
49+ const url = { host : 'localhost' , port, path : `/bench/${ benchId } ` }
4550 return string ? `http://${ url . host } :${ url . port } ${ url . path } ` : url
4651}
4752
@@ -57,46 +62,47 @@ const shuffler = (array) => {
5762
5863const formatBytes = ( bytes ) => {
5964 if ( bytes === 0 ) return '0 Byte'
60- let k = 1000
61- let dm = 2
62- let sizes = [ 'Bytes' , 'KB' , 'MB' , 'GB' ]
63- let i = Math . floor ( Math . log ( bytes ) / Math . log ( k ) )
65+ const k = 1000
66+ const dm = 2
67+ const sizes = [ 'Bytes' , 'KB' , 'MB' , 'GB' ]
68+ const i = Math . floor ( Math . log ( bytes ) / Math . log ( k ) )
6469 return parseFloat ( ( bytes / Math . pow ( k , i ) ) . toFixed ( dm ) ) + ' ' + sizes [ i ]
6570}
6671
6772// benchamrks
6873const bencher = ( title ) => new Promise ( ( resolve , reject ) => {
6974 console . log ( `benchmarking ${ title } ` )
70- let port = ports [ title ]
71- let done = ( err , res ) => {
75+ const port = ports [ title ]
76+ const done = ( err , res ) => {
7277 if ( err ) return reject ( err )
7378 results . push ( res )
7479 return resolve ( title )
7580 }
76- let acOpts = {
81+ const acOpts = {
7782 url : urlTemplate ( port , true ) ,
7883 title,
7984 connections : lob ? 10 : 50 ,
8085 pipelining : lob ? 1 : 10 ,
81- headers : { 'accept-encoding' : 'gzip, deflate, br' }
86+ headers : { 'accept-encoding' : 'gzip, deflate, br' }
8287 }
83- autocannon ( Object . assign ( { duration : 3 } , acOpts ) , ( ) => {
84- autocannon ( Object . assign ( { duration : 7 } , acOpts ) , done )
88+ autocannon ( Object . assign ( { duration : 3 } , acOpts ) , ( ) => {
89+ autocannon ( Object . assign ( { duration : 7 } , acOpts ) , done )
8590 } )
8691} )
8792
8893let last = { }
8994const checkConsistency = async ( name ) => {
90- let port = ports [ name ]
95+ const port = ports [ name ]
9196 let { data, headers } = await get ( urlTemplate ( port , true ) )
92- let isJSON = headers [ 'content-type' ] . indexOf ( 'application/json' ) !== - 1
97+ const isJSON = headers [ 'content-type' ] . indexOf ( 'application/json' ) !== - 1
9398 data = `${ JSON . stringify ( data ) } -isJson:${ isJSON } `
99+
94100 if ( ! data || ( last . lib && last . result !== data ) ) {
95- let err = new Error ( `Got inconsistent results from libraries` )
101+ const err = new Error ( `Got inconsistent results from libraries` )
96102 err . meta = [ `${ last . lib } - ${ last . result } ` , `${ name } - ${ data } ` ]
97103 throw err
98104 }
99- last = { lib : name , result : data }
105+ last = { lib : name , result : data }
100106}
101107
102108const getEndMemory = ( name ) => new Promise ( ( resolve , reject ) => {
@@ -106,28 +112,32 @@ const getEndMemory = (name) => new Promise((resolve, reject) => {
106112
107113async function bench ( ) {
108114 console . log ( `servers running, starting benchmarks\n` )
109- let keys = shuffler ( Object . keys ( ports ) )
110- for ( let name of keys ) {
115+ const keys = shuffler ( Object . keys ( ports ) )
116+
117+ for ( const name of keys ) {
111118 try {
112119 await checkConsistency ( name )
113120 } catch ( ex ) {
114121 console . log ( ex , name )
115122 process . exit ( )
116123 }
117124 }
118- for ( let name of keys ) await bencher ( name )
119- for ( let name of keys ) await getEndMemory ( name )
120- let head = [
121- { alias : 'lib' , width : 12 } ,
122- { alias : 'req/sec' , width : 12 } ,
123- { alias : 'latency' , width : 12 } ,
124- { alias : 'throughput' , width : 14 } ,
125- { alias : 'errors' , width : 11 } ,
126- { alias : 'memory (start)' } ,
127- { alias : 'memory (end)' }
128- ] . map ( ( h ) => Object . assign ( { paddingLeft : 0 , paddingRight : 0 } , h ) )
125+
126+ for ( const name of keys ) await bencher ( name )
127+ for ( const name of keys ) await getEndMemory ( name )
128+
129+ const head = [
130+ { alias : 'lib' , width : 12 } ,
131+ { alias : 'req/sec' , width : 12 } ,
132+ { alias : 'latency' , width : 12 } ,
133+ { alias : 'throughput' , width : 14 } ,
134+ { alias : 'errors' , width : 11 } ,
135+ { alias : 'memory (start)' } ,
136+ { alias : 'memory (end)' }
137+ ] . map ( ( h ) => Object . assign ( { paddingLeft : 0 , paddingRight : 0 } , h ) )
138+
129139 results . sort ( ( a , b ) => b . requests . average - a . requests . average )
130- let rows = results . map ( ( r ) => [
140+ const rows = results . map ( ( r ) => [
131141 r . title ,
132142 r . requests . average ,
133143 r . latency . average ,
@@ -136,6 +146,7 @@ async function bench () {
136146 memory [ r . title ] . start . split ( '/' ) . map ( formatBytes ) . join ( '\n' ) ,
137147 memory [ r . title ] . end . split ( '/' ) . map ( formatBytes ) . join ( '\n' )
138148 ] )
149+
139150 console . log ( table ( head , rows ) . render ( ) )
140151 process . exit ( )
141152}
0 commit comments