1
+ 'use strict'
2
+
3
+ /* eslint handle-callback-err: 0 */
4
+
5
+ var intercept = require ( 'intercept-stdout' )
1
6
var Benchmark = require ( 'benchmark' )
2
7
var suite = new Benchmark . Suite ( )
3
-
4
8
var Parser = require ( './../' )
5
- var ParserOLD = require ( './old/parser' )
6
-
7
- function returnError ( error ) {
8
- error = null
9
- }
10
-
11
- function checkReply ( ) { }
12
9
10
+ function returnError ( error ) { }
11
+ function checkReply ( error , res ) { }
13
12
function shuffle ( array ) {
14
13
var currentIndex = array . length
15
14
var temporaryValue
@@ -30,6 +29,9 @@ function shuffle (array) {
30
29
return array
31
30
}
32
31
32
+ // Suppress hiredis warnings
33
+ intercept ( function ( ) { } , function ( ) { return '' } )
34
+
33
35
var startBuffer = new Buffer ( '$100\r\nabcdefghij' )
34
36
var chunkBuffer = new Buffer ( 'abcdefghijabcdefghijabcdefghij' )
35
37
var stringBuffer = new Buffer ( '+testing a simple string\r\n' )
@@ -43,6 +45,7 @@ var lorem = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, ' +
43
45
'ut aliquip ex ea commodo consequat. Duis aute irure dolor in' // 256 chars
44
46
var bigStringArray = ( new Array ( Math . pow ( 2 , 16 ) / lorem . length ) . join ( lorem + ' ' ) ) . split ( ' ' ) // Math.pow(2, 16) chars long
45
47
var startBigBuffer = new Buffer ( '$' + ( 4 * 1024 * 1024 ) + '\r\n' )
48
+
46
49
var chunks = new Array ( 64 )
47
50
for ( var i = 0 ; i < 64 ; i ++ ) {
48
51
chunks [ i ] = new Buffer ( shuffle ( bigStringArray ) . join ( ' ' ) + '.' ) // Math.pow(2, 16) chars long
@@ -60,81 +63,67 @@ for (i = 0; i < arraySize; i++) {
60
63
var arrayBuffer = new Buffer ( array )
61
64
62
65
var bigArraySize = 1000
63
- var bigArrayChunks = [ new Buffer ( '*' + bigArraySize ) ]
66
+ var bigArrayChunks = [ new Buffer ( '*' + bigArraySize * 2 ) ]
64
67
for ( i = 0 ; i < bigArraySize ; i ++ ) {
65
68
size = ( Math . random ( ) * 10000 | 0 )
66
69
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 ) )
68
71
} 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 ) )
70
73
}
71
74
}
72
75
bigArrayChunks . push ( new Buffer ( '\r\n' ) )
73
76
74
77
var chunkedStringPart1 = new Buffer ( '+foobar' )
75
78
var chunkedStringPart2 = new Buffer ( 'bazEND\r\n' )
76
79
77
- var parserOld = new ParserOLD ( {
80
+ var options = {
78
81
returnReply : checkReply ,
79
82
returnError : returnError ,
80
- returnFatalError : returnError ,
81
- name : 'javascript'
82
- } )
83
+ returnFatalError : returnError
84
+ }
85
+ var parser = new Parser ( options )
83
86
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 )
90
89
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 )
96
92
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 )
103
95
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 )
110
99
111
100
// BULK STRINGS
112
101
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 ( ) {
122
103
parserHiRedis . execute ( startBuffer )
123
104
parserHiRedis . execute ( chunkBuffer )
124
105
parserHiRedis . execute ( chunkBuffer )
125
106
parserHiRedis . execute ( chunkBuffer )
126
107
parserHiRedis . execute ( endBuffer )
127
108
} )
128
109
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 ( ) {
130
119
parser . execute ( startBuffer )
131
120
parser . execute ( chunkBuffer )
132
121
parser . execute ( chunkBuffer )
133
122
parser . execute ( chunkBuffer )
134
123
parser . execute ( endBuffer )
135
124
} )
136
125
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 ( ) {
138
127
parserBuffer . execute ( startBuffer )
139
128
parserBuffer . execute ( chunkBuffer )
140
129
parserBuffer . execute ( chunkBuffer )
@@ -144,53 +133,53 @@ suite.add('NEW BUF: multiple chunks in a bulk string', function () {
144
133
145
134
// CHUNKED STRINGS
146
135
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 ( ) {
153
137
parserHiRedis . execute ( chunkedStringPart1 )
154
138
parserHiRedis . execute ( chunkedStringPart2 )
155
139
} )
156
140
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 ( ) {
158
147
parser . execute ( chunkedStringPart1 )
159
148
parser . execute ( chunkedStringPart2 )
160
149
} )
161
150
162
- suite . add ( 'NEW BUF: multiple chunks in a string' , function ( ) {
151
+ suite . add ( 'JS PARSER BUF: + multiple chunks in a string' , function ( ) {
163
152
parserBuffer . execute ( chunkedStringPart1 )
164
153
parserBuffer . execute ( chunkedStringPart2 )
165
154
} )
166
155
167
156
// BIG BULK STRING
168
157
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 )
171
160
for ( var i = 0 ; i < 64 ; i ++ ) {
172
- parserOld . execute ( chunks [ i ] )
161
+ parserHiRedis . execute ( chunks [ i ] )
173
162
}
174
- parserOld . execute ( endBuffer )
163
+ parserHiRedis . execute ( endBuffer )
175
164
} )
176
165
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 )
179
168
for ( var i = 0 ; i < 64 ; i ++ ) {
180
- parserHiRedis . execute ( chunks [ i ] )
169
+ parserHiRedisBuffer . execute ( chunks [ i ] )
181
170
}
182
- parserHiRedis . execute ( endBuffer )
171
+ parserHiRedisBuffer . execute ( endBuffer )
183
172
} )
184
173
185
- suite . add ( 'NEW CODE: 4mb bulk string' , function ( ) {
174
+ suite . add ( 'JS PARSER: $ 4mb bulk string' , function ( ) {
186
175
parser . execute ( startBigBuffer )
187
176
for ( var i = 0 ; i < 64 ; i ++ ) {
188
177
parser . execute ( chunks [ i ] )
189
178
}
190
179
parser . execute ( endBuffer )
191
180
} )
192
181
193
- suite . add ( 'NEW BUF: 4mb bulk string' , function ( ) {
182
+ suite . add ( 'JS PARSER BUF: $ 4mb bulk string' , function ( ) {
194
183
parserBuffer . execute ( startBigBuffer )
195
184
for ( var i = 0 ; i < 64 ; i ++ ) {
196
185
parserBuffer . execute ( chunks [ i ] )
@@ -200,107 +189,101 @@ suite.add('NEW BUF: 4mb bulk string', function () {
200
189
201
190
// STRINGS
202
191
203
- suite . add ( '\nOLD CODE : + simple string' , function ( ) {
204
- parserOld . execute ( stringBuffer )
192
+ suite . add ( '\nHIREDIS : + simple string' , function ( ) {
193
+ parserHiRedis . execute ( stringBuffer )
205
194
} )
206
195
207
- suite . add ( 'HIREDIS: + simple string' , function ( ) {
208
- parserHiRedis . execute ( stringBuffer )
196
+ suite . add ( 'HIREDIS BUF : + simple string' , function ( ) {
197
+ parserHiRedisBuffer . execute ( stringBuffer )
209
198
} )
210
199
211
- suite . add ( 'NEW CODE : + simple string' , function ( ) {
200
+ suite . add ( 'JS PARSER : + simple string' , function ( ) {
212
201
parser . execute ( stringBuffer )
213
202
} )
214
203
215
- suite . add ( 'NEW BUF: + simple string' , function ( ) {
204
+ suite . add ( 'JS PARSER BUF: + simple string' , function ( ) {
216
205
parserBuffer . execute ( stringBuffer )
217
206
} )
218
207
219
208
// INTEGERS
220
209
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 ( ) {
226
211
parserHiRedis . execute ( integerBuffer )
227
212
} )
228
213
229
- suite . add ( 'NEW CODE: + integer' , function ( ) {
214
+ suite . add ( 'JS PARSER: : integer' , function ( ) {
230
215
parser . execute ( integerBuffer )
231
216
} )
232
217
233
- suite . add ( 'NEW STR: + integer' , function ( ) {
218
+ suite . add ( 'JS PARSER STR: : integer' , function ( ) {
234
219
parserStr . execute ( integerBuffer )
235
220
} )
236
221
237
222
// BIG INTEGER
238
223
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 ( ) {
244
225
parserHiRedis . execute ( bigIntegerBuffer )
245
226
} )
246
227
247
- suite . add ( 'NEW CODE: + big integer' , function ( ) {
228
+ suite . add ( 'JS PARSER: : big integer' , function ( ) {
248
229
parser . execute ( bigIntegerBuffer )
249
230
} )
250
231
251
- suite . add ( 'NEW STR: + big integer' , function ( ) {
232
+ suite . add ( 'JS PARSER STR: : big integer' , function ( ) {
252
233
parserStr . execute ( bigIntegerBuffer )
253
234
} )
254
235
255
236
// ARRAYS
256
237
257
- suite . add ( '\nOLD CODE : * array' , function ( ) {
258
- parserOld . execute ( arrayBuffer )
238
+ suite . add ( '\nHIREDIS : * array' , function ( ) {
239
+ parserHiRedis . execute ( arrayBuffer )
259
240
} )
260
241
261
- suite . add ( 'HIREDIS: * array' , function ( ) {
262
- parserHiRedis . execute ( arrayBuffer )
242
+ suite . add ( 'HIREDIS BUF : * array' , function ( ) {
243
+ parserHiRedisBuffer . execute ( arrayBuffer )
263
244
} )
264
245
265
- suite . add ( 'NEW CODE : * array' , function ( ) {
246
+ suite . add ( 'JS PARSER : * array' , function ( ) {
266
247
parser . execute ( arrayBuffer )
267
248
} )
268
249
269
- suite . add ( 'NEW BUF: * array' , function ( ) {
250
+ suite . add ( 'JS PARSER BUF: * array' , function ( ) {
270
251
parserBuffer . execute ( arrayBuffer )
271
252
} )
272
253
273
- // BIG ARRAYS (running the old parser is to slow)
254
+ // BIG ARRAYS
274
255
275
- suite . add ( 'HIREDIS : * bigArray ' , function ( ) {
256
+ suite . add ( '\nHIREDIS : * big array ' , function ( ) {
276
257
for ( var i = 0 ; i < bigArrayChunks . length ; i ++ ) {
277
258
parserHiRedis . execute ( bigArrayChunks [ i ] )
278
259
}
279
260
} )
280
261
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 ( ) {
282
269
for ( var i = 0 ; i < bigArrayChunks . length ; i ++ ) {
283
270
parser . execute ( bigArrayChunks [ i ] )
284
271
}
285
272
} )
286
273
287
- suite . add ( 'NEW BUF: * bigArray ' , function ( ) {
274
+ suite . add ( 'JS PARSER BUF: * big array ' , function ( ) {
288
275
for ( var i = 0 ; i < bigArrayChunks . length ; i ++ ) {
289
276
parserBuffer . execute ( bigArrayChunks [ i ] )
290
277
}
291
278
} )
292
279
293
280
// ERRORS
294
281
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 ( ) {
300
283
parserHiRedis . execute ( errorBuffer )
301
284
} )
302
285
303
- suite . add ( 'NEW CODE: * error' , function ( ) {
286
+ suite . add ( 'JS PARSER: - error' , function ( ) {
304
287
parser . execute ( errorBuffer )
305
288
} )
306
289
@@ -311,6 +294,8 @@ suite.on('cycle', function (event) {
311
294
312
295
suite . on ( 'complete' , function ( ) {
313
296
console . log ( '\n\nFastest is ' + this . filter ( 'fastest' ) . map ( 'name' ) )
297
+ // Do not wait for the bufferPool to shrink
298
+ process . exit ( )
314
299
} )
315
300
316
301
suite . run ( { delay : 1 , minSamples : 150 } )
0 commit comments