Skip to content

Commit b971e19

Browse files
committed
chore: improve length parsing performance
1 parent 50cf3d1 commit b971e19

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

lib/parser.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,22 @@ function parseSimpleString (parser) {
115115
}
116116

117117
/**
118-
* Returns the string length via parseSimpleNumbers
118+
* Returns the read length
119119
* @param parser
120120
* @returns {*}
121121
*/
122122
function parseLength (parser) {
123-
const string = parseSimpleNumbers(parser)
124-
if (string !== undefined) {
125-
return string
123+
const length = parser.buffer.length - 1
124+
var offset = parser.offset
125+
var number = 0
126+
127+
while (offset < length) {
128+
const c1 = parser.buffer[offset++]
129+
if (c1 === 13) {
130+
parser.offset = offset + 1
131+
return number
132+
}
133+
number = (number * 10) + (c1 - 48)
126134
}
127135
}
128136

test/parsers.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ describe('parsers', function () {
195195
assert.strictEqual(replyCount, 6)
196196
parser.execute(Buffer.from('$-5'))
197197
assert.strictEqual(replyCount, 6)
198-
parser.execute(Buffer.from('\r\n:12345\r\n*-\r\n*-1\r\n+t\r\n'))
198+
parser.execute(Buffer.from('\r\n:12345\r\n*0\r\n*-1\r\n+t\r\n'))
199199
assert.strictEqual(replyCount, 11)
200200
})
201201

0 commit comments

Comments
 (0)