Make QueryString.parse run faster

Use decodeURIComponent when appropriate, and only fall back to
querystring.decode if it throws, or if the character is a '+'.

Fix #2248
This commit is contained in:
Philip Tellis 2011-12-03 00:12:32 +05:30 committed by isaacs
parent 3deceaf6e7
commit 5166758927

View File

@ -170,9 +170,17 @@ QueryString.parse = QueryString.decode = function(qs, sep, eq) {
}
qs.split(sep).forEach(function(kvp) {
var x = kvp.split(eq);
var k = QueryString.unescape(x[0], true);
var v = QueryString.unescape(x.slice(1).join(eq), true);
var x = kvp.split(eq), k, v, useQS=false;
try {
if (kvp.match(/\+/)) { // decodeURIComponent does not decode + to space
throw "has +";
}
k = decodeURIComponent(x[0]);
v = decodeURIComponent(x.slice(1).join(eq) || "");
} catch(e) {
k = QueryString.unescape(x[0], true);
v = QueryString.unescape(x.slice(1).join(eq), true);
}
if (!hasOwnProperty(obj, k)) {
obj[k] = v;