1+ 'use strict'
2+
3+ /* eslint handle-callback-err: 0 */
4+
5+ var intercept = require ( 'intercept-stdout' )
16var Benchmark = require ( 'benchmark' )
27var suite = new Benchmark . Suite ( )
3-
48var Parser = require ( './../' )
5- var ParserOLD = require ( './old/parser' )
6-
7- function returnError ( error ) {
8- error = null
9- }
10-
11- function checkReply ( ) { }
129
10+ function returnError ( error ) { }
11+ function checkReply ( error , res ) { }
1312function shuffle ( array ) {
1413 var currentIndex = array . length
1514 var temporaryValue
@@ -30,6 +29,9 @@ function shuffle (array) {
3029 return array
3130}
3231
32+ // Suppress hiredis warnings
33+ intercept ( function ( ) { } , function ( ) { return '' } )
34+
3335var startBuffer = new Buffer ( '$100\r\nabcdefghij' )
3436var chunkBuffer = new Buffer ( 'abcdefghijabcdefghijabcdefghij' )
3537var stringBuffer = new Buffer ( '+testing a simple string\r\n' )
@@ -43,6 +45,7 @@ var lorem = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, ' +
4345 'ut aliquip ex ea commodo consequat. Duis aute irure dolor in' // 256 chars
4446var bigStringArray = ( new Array ( Math . pow ( 2 , 16 ) / lorem . length ) . join ( lorem + ' ' ) ) . split ( ' ' ) // Math.pow(2, 16) chars long
4547var startBigBuffer = new Buffer ( '$' + ( 4 * 1024 * 1024 ) + '\r\n' )
48+
4649var chunks = new Array ( 64 )
4750for ( var i = 0 ; i < 64 ; i ++ ) {
4851 chunks [ i ] = new Buffer ( shuffle ( bigStringArray ) . join ( ' ' ) + '.' ) // Math.pow(2, 16) chars long
@@ -60,81 +63,67 @@ for (i = 0; i < arraySize; i++) {
6063var arrayBuffer = new Buffer ( array )
6164
6265var bigArraySize = 1000
63- var bigArrayChunks = [ new Buffer ( '*' + bigArraySize ) ]
66+ var bigArrayChunks = [ new Buffer ( '*' + bigArraySize * 2 ) ]
6467for ( i = 0 ; i < bigArraySize ; i ++ ) {
6568 size = ( Math . random ( ) * 10000 | 0 )
6669 if ( i % 2 ) {
67- bigArrayChunks . push ( new Buffer ( '\r\n$' + size + '\r\n' + Array ( size + 1 ) . join ( 'a' ) ) )
70+ bigArrayChunks . push ( new Buffer ( '\r\n$' + size + '\r\n' + Array ( size + 1 ) . join ( 'a' ) + '\r\n:' + size ) )
6871 } else {
69- bigArrayChunks . push ( new Buffer ( '\r\n+' + Array ( size + 1 ) . join ( 'b' ) ) )
72+ bigArrayChunks . push ( new Buffer ( '\r\n+' + Array ( size + 1 ) . join ( 'b' ) + '\r\n:' + size ) )
7073 }
7174}
7275bigArrayChunks . push ( new Buffer ( '\r\n' ) )
7376
7477var chunkedStringPart1 = new Buffer ( '+foobar' )
7578var chunkedStringPart2 = new Buffer ( 'bazEND\r\n' )
7679
77- var parserOld = new ParserOLD ( {
80+ var options = {
7881 returnReply : checkReply ,
7982 returnError : returnError ,
80- returnFatalError : returnError ,
81- name : 'javascript'
82- } )
83+ returnFatalError : returnError
84+ }
85+ var parser = new Parser ( options )
8386
84- var parserHiRedis = new Parser ( {
85- returnReply : checkReply ,
86- returnError : returnError ,
87- returnFatalError : returnError ,
88- name : 'hiredis'
89- } )
87+ options . returnBuffers = true
88+ var parserBuffer = new Parser ( options )
9089
91- var parser = new Parser ( {
92- returnReply : checkReply ,
93- returnError : returnError ,
94- returnFatalError : returnError
95- } )
90+ options . name = 'hiredis'
91+ var parserHiRedisBuffer = new Parser ( options )
9692
97- var parserBuffer = new Parser ( {
98- returnReply : checkReply ,
99- returnError : returnError ,
100- returnFatalError : returnError ,
101- returnBuffers : true
102- } )
93+ delete options . returnBuffers
94+ var parserHiRedis = new Parser ( options )
10395
104- var parserStr = new Parser ( {
105- returnReply : checkReply ,
106- returnError : returnError ,
107- returnFatalError : returnError ,
108- stringNumbers : true
109- } )
96+ delete options . name
97+ options . stringNumbers = true
98+ var parserStr = new Parser ( options )
11099
111100// BULK STRINGS
112101
113- suite . add ( 'OLD CODE: multiple chunks in a bulk string' , function ( ) {
114- parserOld . execute ( startBuffer )
115- parserOld . execute ( chunkBuffer )
116- parserOld . execute ( chunkBuffer )
117- parserOld . execute ( chunkBuffer )
118- parserOld . execute ( endBuffer )
119- } )
120-
121- suite . add ( 'HIREDIS: multiple chunks in a bulk string' , function ( ) {
102+ suite . add ( 'HIREDIS: $ multiple chunks in a bulk string' , function ( ) {
122103 parserHiRedis . execute ( startBuffer )
123104 parserHiRedis . execute ( chunkBuffer )
124105 parserHiRedis . execute ( chunkBuffer )
125106 parserHiRedis . execute ( chunkBuffer )
126107 parserHiRedis . execute ( endBuffer )
127108} )
128109
129- suite . add ( 'NEW CODE: multiple chunks in a bulk string' , function ( ) {
110+ suite . add ( 'HIREDIS BUF: $ multiple chunks in a bulk string' , function ( ) {
111+ parserHiRedisBuffer . execute ( startBuffer )
112+ parserHiRedisBuffer . execute ( chunkBuffer )
113+ parserHiRedisBuffer . execute ( chunkBuffer )
114+ parserHiRedisBuffer . execute ( chunkBuffer )
115+ parserHiRedisBuffer . execute ( endBuffer )
116+ } )
117+
118+ suite . add ( 'JS PARSER: $ multiple chunks in a bulk string' , function ( ) {
130119 parser . execute ( startBuffer )
131120 parser . execute ( chunkBuffer )
132121 parser . execute ( chunkBuffer )
133122 parser . execute ( chunkBuffer )
134123 parser . execute ( endBuffer )
135124} )
136125
137- suite . add ( 'NEW BUF: multiple chunks in a bulk string' , function ( ) {
126+ suite . add ( 'JS PARSER BUF: $ multiple chunks in a bulk string' , function ( ) {
138127 parserBuffer . execute ( startBuffer )
139128 parserBuffer . execute ( chunkBuffer )
140129 parserBuffer . execute ( chunkBuffer )
@@ -144,53 +133,53 @@ suite.add('NEW BUF: multiple chunks in a bulk string', function () {
144133
145134// CHUNKED STRINGS
146135
147- suite . add ( '\nOLD CODE: multiple chunks in a string' , function ( ) {
148- parserOld . execute ( chunkedStringPart1 )
149- parserOld . execute ( chunkedStringPart2 )
150- } )
151-
152- suite . add ( 'HIREDIS: multiple chunks in a string' , function ( ) {
136+ suite . add ( '\nHIREDIS: + multiple chunks in a string' , function ( ) {
153137 parserHiRedis . execute ( chunkedStringPart1 )
154138 parserHiRedis . execute ( chunkedStringPart2 )
155139} )
156140
157- suite . add ( 'NEW CODE: multiple chunks in a string' , function ( ) {
141+ suite . add ( 'HIREDIS BUF: + multiple chunks in a string' , function ( ) {
142+ parserHiRedisBuffer . execute ( chunkedStringPart1 )
143+ parserHiRedisBuffer . execute ( chunkedStringPart2 )
144+ } )
145+
146+ suite . add ( 'JS PARSER: + multiple chunks in a string' , function ( ) {
158147 parser . execute ( chunkedStringPart1 )
159148 parser . execute ( chunkedStringPart2 )
160149} )
161150
162- suite . add ( 'NEW BUF: multiple chunks in a string' , function ( ) {
151+ suite . add ( 'JS PARSER BUF: + multiple chunks in a string' , function ( ) {
163152 parserBuffer . execute ( chunkedStringPart1 )
164153 parserBuffer . execute ( chunkedStringPart2 )
165154} )
166155
167156// BIG BULK STRING
168157
169- suite . add ( '\nOLD CODE: 4mb bulk string' , function ( ) {
170- parserOld . execute ( startBigBuffer )
158+ suite . add ( '\nHIREDIS: $ 4mb bulk string' , function ( ) {
159+ parserHiRedis . execute ( startBigBuffer )
171160 for ( var i = 0 ; i < 64 ; i ++ ) {
172- parserOld . execute ( chunks [ i ] )
161+ parserHiRedis . execute ( chunks [ i ] )
173162 }
174- parserOld . execute ( endBuffer )
163+ parserHiRedis . execute ( endBuffer )
175164} )
176165
177- suite . add ( 'HIREDIS: 4mb bulk string' , function ( ) {
178- parserHiRedis . execute ( startBigBuffer )
166+ suite . add ( 'HIREDIS BUF: $ 4mb bulk string' , function ( ) {
167+ parserHiRedisBuffer . execute ( startBigBuffer )
179168 for ( var i = 0 ; i < 64 ; i ++ ) {
180- parserHiRedis . execute ( chunks [ i ] )
169+ parserHiRedisBuffer . execute ( chunks [ i ] )
181170 }
182- parserHiRedis . execute ( endBuffer )
171+ parserHiRedisBuffer . execute ( endBuffer )
183172} )
184173
185- suite . add ( 'NEW CODE: 4mb bulk string' , function ( ) {
174+ suite . add ( 'JS PARSER: $ 4mb bulk string' , function ( ) {
186175 parser . execute ( startBigBuffer )
187176 for ( var i = 0 ; i < 64 ; i ++ ) {
188177 parser . execute ( chunks [ i ] )
189178 }
190179 parser . execute ( endBuffer )
191180} )
192181
193- suite . add ( 'NEW BUF: 4mb bulk string' , function ( ) {
182+ suite . add ( 'JS PARSER BUF: $ 4mb bulk string' , function ( ) {
194183 parserBuffer . execute ( startBigBuffer )
195184 for ( var i = 0 ; i < 64 ; i ++ ) {
196185 parserBuffer . execute ( chunks [ i ] )
@@ -200,107 +189,101 @@ suite.add('NEW BUF: 4mb bulk string', function () {
200189
201190// STRINGS
202191
203- suite . add ( '\nOLD CODE : + simple string' , function ( ) {
204- parserOld . execute ( stringBuffer )
192+ suite . add ( '\nHIREDIS : + simple string' , function ( ) {
193+ parserHiRedis . execute ( stringBuffer )
205194} )
206195
207- suite . add ( 'HIREDIS: + simple string' , function ( ) {
208- parserHiRedis . execute ( stringBuffer )
196+ suite . add ( 'HIREDIS BUF : + simple string' , function ( ) {
197+ parserHiRedisBuffer . execute ( stringBuffer )
209198} )
210199
211- suite . add ( 'NEW CODE : + simple string' , function ( ) {
200+ suite . add ( 'JS PARSER : + simple string' , function ( ) {
212201 parser . execute ( stringBuffer )
213202} )
214203
215- suite . add ( 'NEW BUF: + simple string' , function ( ) {
204+ suite . add ( 'JS PARSER BUF: + simple string' , function ( ) {
216205 parserBuffer . execute ( stringBuffer )
217206} )
218207
219208// INTEGERS
220209
221- suite . add ( '\nOLD CODE: + integer' , function ( ) {
222- parserOld . execute ( integerBuffer )
223- } )
224-
225- suite . add ( 'HIREDIS: + integer' , function ( ) {
210+ suite . add ( '\nHIREDIS: : integer' , function ( ) {
226211 parserHiRedis . execute ( integerBuffer )
227212} )
228213
229- suite . add ( 'NEW CODE: + integer' , function ( ) {
214+ suite . add ( 'JS PARSER: : integer' , function ( ) {
230215 parser . execute ( integerBuffer )
231216} )
232217
233- suite . add ( 'NEW STR: + integer' , function ( ) {
218+ suite . add ( 'JS PARSER STR: : integer' , function ( ) {
234219 parserStr . execute ( integerBuffer )
235220} )
236221
237222// BIG INTEGER
238223
239- suite . add ( '\nOLD CODE: + big integer' , function ( ) {
240- parserOld . execute ( bigIntegerBuffer )
241- } )
242-
243- suite . add ( 'HIREDIS: + big integer' , function ( ) {
224+ suite . add ( '\nHIREDIS: : big integer' , function ( ) {
244225 parserHiRedis . execute ( bigIntegerBuffer )
245226} )
246227
247- suite . add ( 'NEW CODE: + big integer' , function ( ) {
228+ suite . add ( 'JS PARSER: : big integer' , function ( ) {
248229 parser . execute ( bigIntegerBuffer )
249230} )
250231
251- suite . add ( 'NEW STR: + big integer' , function ( ) {
232+ suite . add ( 'JS PARSER STR: : big integer' , function ( ) {
252233 parserStr . execute ( bigIntegerBuffer )
253234} )
254235
255236// ARRAYS
256237
257- suite . add ( '\nOLD CODE : * array' , function ( ) {
258- parserOld . execute ( arrayBuffer )
238+ suite . add ( '\nHIREDIS : * array' , function ( ) {
239+ parserHiRedis . execute ( arrayBuffer )
259240} )
260241
261- suite . add ( 'HIREDIS: * array' , function ( ) {
262- parserHiRedis . execute ( arrayBuffer )
242+ suite . add ( 'HIREDIS BUF : * array' , function ( ) {
243+ parserHiRedisBuffer . execute ( arrayBuffer )
263244} )
264245
265- suite . add ( 'NEW CODE : * array' , function ( ) {
246+ suite . add ( 'JS PARSER : * array' , function ( ) {
266247 parser . execute ( arrayBuffer )
267248} )
268249
269- suite . add ( 'NEW BUF: * array' , function ( ) {
250+ suite . add ( 'JS PARSER BUF: * array' , function ( ) {
270251 parserBuffer . execute ( arrayBuffer )
271252} )
272253
273- // BIG ARRAYS (running the old parser is to slow)
254+ // BIG ARRAYS
274255
275- suite . add ( 'HIREDIS : * bigArray ' , function ( ) {
256+ suite . add ( '\nHIREDIS : * big array ' , function ( ) {
276257 for ( var i = 0 ; i < bigArrayChunks . length ; i ++ ) {
277258 parserHiRedis . execute ( bigArrayChunks [ i ] )
278259 }
279260} )
280261
281- suite . add ( 'NEW CODE: * bigArray' , function ( ) {
262+ suite . add ( 'HIREDIS BUF: * big array' , function ( ) {
263+ for ( var i = 0 ; i < bigArrayChunks . length ; i ++ ) {
264+ parserHiRedisBuffer . execute ( bigArrayChunks [ i ] )
265+ }
266+ } )
267+
268+ suite . add ( 'JS PARSER: * big array' , function ( ) {
282269 for ( var i = 0 ; i < bigArrayChunks . length ; i ++ ) {
283270 parser . execute ( bigArrayChunks [ i ] )
284271 }
285272} )
286273
287- suite . add ( 'NEW BUF: * bigArray ' , function ( ) {
274+ suite . add ( 'JS PARSER BUF: * big array ' , function ( ) {
288275 for ( var i = 0 ; i < bigArrayChunks . length ; i ++ ) {
289276 parserBuffer . execute ( bigArrayChunks [ i ] )
290277 }
291278} )
292279
293280// ERRORS
294281
295- suite . add ( '\nOLD CODE: * error' , function ( ) {
296- parserOld . execute ( errorBuffer )
297- } )
298-
299- suite . add ( 'HIREDIS: * error' , function ( ) {
282+ suite . add ( '\nHIREDIS: - error' , function ( ) {
300283 parserHiRedis . execute ( errorBuffer )
301284} )
302285
303- suite . add ( 'NEW CODE: * error' , function ( ) {
286+ suite . add ( 'JS PARSER: - error' , function ( ) {
304287 parser . execute ( errorBuffer )
305288} )
306289
@@ -311,6 +294,8 @@ suite.on('cycle', function (event) {
311294
312295suite . on ( 'complete' , function ( ) {
313296 console . log ( '\n\nFastest is ' + this . filter ( 'fastest' ) . map ( 'name' ) )
297+ // Do not wait for the bufferPool to shrink
298+ process . exit ( )
314299} )
315300
316301suite . run ( { delay : 1 , minSamples : 150 } )
0 commit comments