Skip to content

Commit 2e25704

Browse files
author
Ruben Bridgewater
committed
Remove old parser and run more hiredis benchmarks
1 parent 06a0562 commit 2e25704

File tree

4 files changed

+88
-370
lines changed

4 files changed

+88
-370
lines changed

benchmark/index.js

Lines changed: 88 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1+
'use strict'
2+
3+
/* eslint handle-callback-err: 0 */
4+
5+
var intercept = require('intercept-stdout')
16
var Benchmark = require('benchmark')
27
var suite = new Benchmark.Suite()
3-
48
var 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) {}
1312
function 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+
3335
var startBuffer = new Buffer('$100\r\nabcdefghij')
3436
var chunkBuffer = new Buffer('abcdefghijabcdefghijabcdefghij')
3537
var 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
4446
var bigStringArray = (new Array(Math.pow(2, 16) / lorem.length).join(lorem + ' ')).split(' ') // Math.pow(2, 16) chars long
4547
var startBigBuffer = new Buffer('$' + (4 * 1024 * 1024) + '\r\n')
48+
4649
var chunks = new Array(64)
4750
for (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++) {
6063
var arrayBuffer = new Buffer(array)
6164

6265
var bigArraySize = 1000
63-
var bigArrayChunks = [new Buffer('*' + bigArraySize)]
66+
var bigArrayChunks = [new Buffer('*' + bigArraySize * 2)]
6467
for (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
}
7275
bigArrayChunks.push(new Buffer('\r\n'))
7376

7477
var chunkedStringPart1 = new Buffer('+foobar')
7578
var 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

312295
suite.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

316301
suite.run({ delay: 1, minSamples: 150 })

0 commit comments

Comments
 (0)