Skip to content

Commit

Permalink
querystring: avoid indexOf when parsing
Browse files Browse the repository at this point in the history
Fixes a performance regression in body-parser with V8 6.0.
Removes the use of an auxiliary array, and just query the object
directly.

PR-URL: #14703
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: Evan Lucas <[email protected]>
Reviewed-By: Sakthipriyan Vairamani <[email protected]>
Reviewed-By: Luigi Pinca <[email protected]>
  • Loading branch information
mcollina authored and addaleax committed Aug 9, 2017
1 parent a813294 commit e813cfa
Showing 1 changed file with 2 additions and 8 deletions.
10 changes: 2 additions & 8 deletions lib/querystring.js
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,6 @@ function parse(qs, sep, eq, options) {
}
const customDecode = (decode !== qsUnescape);

const keys = [];
var lastPos = 0;
var sepIdx = 0;
var eqIdx = 0;
Expand Down Expand Up @@ -326,11 +325,8 @@ function parse(qs, sep, eq, options) {
if (value.length > 0 && valEncoded)
value = decodeStr(value, decode);

// Use a key array lookup instead of using hasOwnProperty(), which is
// slower
if (keys.indexOf(key) === -1) {
if (obj[key] === undefined) {
obj[key] = value;
keys[keys.length] = key;
} else {
const curValue = obj[key];
// A simple Array-specific property check is enough here to
Expand Down Expand Up @@ -428,10 +424,8 @@ function parse(qs, sep, eq, options) {
key = decodeStr(key, decode);
if (value.length > 0 && valEncoded)
value = decodeStr(value, decode);
// Use a key array lookup instead of using hasOwnProperty(), which is slower
if (keys.indexOf(key) === -1) {
if (obj[key] === undefined) {
obj[key] = value;
keys[keys.length] = key;
} else {
const curValue = obj[key];
// A simple Array-specific property check is enough here to
Expand Down

0 comments on commit e813cfa

Please sign in to comment.