Skip to content

Commit 7c65abe

Browse files
jridgewelldougwilson
authored andcommitted
pref: improve default decode speed
closes #77
1 parent 624b4e2 commit 7c65abe

File tree

3 files changed

+46
-23
lines changed

3 files changed

+46
-23
lines changed

HISTORY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ unreleased
33

44
* Add `priority` option
55
* Fix `expires` option to reject invalid dates
6+
* pref: improve default decode speed
67
* pref: remove slow string split in parse
78

89
0.4.2 / 2022-02-02

README.md

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -239,34 +239,34 @@ $ npm run bench
239239
240240
15 tests completed.
241241
242-
parse apple.com x 1,247,936 ops/sec ±0.86% (186 runs sampled)
243-
parse cloudflare.com x 252,012 ops/sec ±0.94% (187 runs sampled)
244-
parse docs.google.com x 325,788 ops/sec ±1.64% (186 runs sampled)
245-
parse drive.google.com x 345,108 ops/sec ±0.73% (185 runs sampled)
246-
parse en.wikipedia.org x 177,795 ops/sec ±1.33% (187 runs sampled)
247-
parse linkedin.com x 111,281 ops/sec ±0.75% (189 runs sampled)
248-
parse maps.google.com x 181,924 ops/sec ±0.90% (187 runs sampled)
249-
parse microsoft.com x 89,373 ops/sec ±0.90% (189 runs sampled)
250-
parse play.google.com x 252,671 ops/sec ±0.76% (189 runs sampled)
251-
parse plus.google.com x 338,954 ops/sec ±0.75% (188 runs sampled)
252-
parse sites.google.com x 338,758 ops/sec ±0.60% (189 runs sampled)
253-
parse support.google.com x 235,755 ops/sec ±0.80% (189 runs sampled)
254-
parse www.google.com x 180,591 ops/sec ±0.83% (187 runs sampled)
255-
parse youtu.be x 335,329 ops/sec ±1.23% (186 runs sampled)
256-
parse youtube.com x 336,261 ops/sec ±0.78% (186 runs sampled)
242+
parse apple.com x 3,459,374 ops/sec ±1.29% (185 runs sampled)
243+
parse cloudflare.com x 2,350,288 ops/sec ±0.82% (187 runs sampled)
244+
parse docs.google.com x 2,556,080 ops/sec ±0.98% (186 runs sampled)
245+
parse drive.google.com x 2,579,129 ops/sec ±0.75% (186 runs sampled)
246+
parse en.wikipedia.org x 852,883 ops/sec ±0.75% (187 runs sampled)
247+
parse linkedin.com x 543,323 ops/sec ±0.71% (188 runs sampled)
248+
parse maps.google.com x 1,319,198 ops/sec ±0.88% (187 runs sampled)
249+
parse microsoft.com x 152,365 ops/sec ±1.07% (186 runs sampled)
250+
parse play.google.com x 2,499,181 ops/sec ±0.68% (187 runs sampled)
251+
parse plus.google.com x 2,558,406 ops/sec ±0.77% (187 runs sampled)
252+
parse sites.google.com x 2,560,766 ops/sec ±0.71% (186 runs sampled)
253+
parse support.google.com x 1,548,934 ops/sec ±0.85% (186 runs sampled)
254+
parse www.google.com x 1,350,825 ops/sec ±1.10% (187 runs sampled)
255+
parse youtu.be x 1,047,505 ops/sec ±0.71% (188 runs sampled)
256+
parse youtube.com x 1,046,127 ops/sec ±0.68% (188 runs sampled)
257257
258258
> node benchmark/parse.js
259259
260260
cookie.parse - generic
261261
262262
6 tests completed.
263263
264-
simple x 1,030,578 ops/sec ±0.94% (187 runs sampled)
265-
decode x 584,782 ops/sec ±1.16% (187 runs sampled)
266-
unquote x 638,382 ops/sec ±1.05% (185 runs sampled)
267-
duplicates x 383,158 ops/sec ±2.11% (185 runs sampled)
268-
10 cookies x 110,175 ops/sec ±0.78% (187 runs sampled)
269-
100 cookies x 10,609 ops/sec ±0.78% (189 runs sampled)
264+
simple x 3,541,023 ops/sec ±0.81% (186 runs sampled)
265+
decode x 569,051 ops/sec ±0.63% (188 runs sampled)
266+
unquote x 3,031,533 ops/sec ±0.80% (184 runs sampled)
267+
duplicates x 937,600 ops/sec ±0.76% (186 runs sampled)
268+
10 cookies x 302,703 ops/sec ±1.25% (188 runs sampled)
269+
100 cookies x 23,559 ops/sec ±0.71% (189 runs sampled)
270270
```
271271

272272
## References

index.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ exports.serialize = serialize;
2121
*/
2222

2323
var __toString = Object.prototype.toString
24-
var decode = decodeURIComponent;
25-
var encode = encodeURIComponent;
2624

2725
/**
2826
* RegExp to match field-content in RFC 7230 sec 3.2
@@ -219,6 +217,30 @@ function serialize(name, val, options) {
219217
return str;
220218
}
221219

220+
/**
221+
* URL-decode string value. Optimized to skip native call when no %.
222+
*
223+
* @param {string} str
224+
* @returns {string}
225+
*/
226+
227+
function decode (str) {
228+
return str.indexOf('%') !== -1
229+
? decodeURIComponent(str)
230+
: str
231+
}
232+
233+
/**
234+
* URL-encode value.
235+
*
236+
* @param {string} str
237+
* @returns {string}
238+
*/
239+
240+
function encode (val) {
241+
return encodeURIComponent(val)
242+
}
243+
222244
/**
223245
* Determine if value is a Date.
224246
*

0 commit comments

Comments
 (0)