querystring: avoid indexOf when parsing
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: https://github.com/nodejs/node/pull/14703 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Evan Lucas <evanlucas@me.com> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
1e569f42b6
commit
7ec28a0a50
@ -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;
|
||||
@ -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
|
||||
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user