Permalink
Browse files

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
  • Loading branch information...
1 parent 3deceaf commit 5166758927e7538d413b030d3b586107cd53024d @bluesmoon bluesmoon committed with Dec 2, 2011
Showing with 11 additions and 3 deletions.
  1. +11 −3 lib/querystring.js
View
14 lib/querystring.js
@@ -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;

0 comments on commit 5166758

Please sign in to comment.