Skip to content

querystring: optimize parse and stringify

Rodrigo Muino Tomonari requested to merge github/fork/mscdex/perf-querystring into v1.x

parse optimizations:

  • Move try-catch to separate function to keep entire function from being deoptimized.
  • Use key array lookup instead of using hasOwnProperty.
  • Avoid decoding known empty strings.
  • Avoid possibly unnecessary switch to slower decoder for values if key decoding throws.

stringify optimizations:

  • Use manual loop for default encoder instead of encodeURIComponent.
  • Use string concatenation instead of joining an array of strings.
  • Avoid caching result of typeof.

Results with benchmarks from #846:

querystring/querystring-parse.js type=noencode n=1000000: ./iojs-after: 296290 ./iojs-before: 224220 ........ 32.14%
querystring/querystring-parse.js type=encodemany n=1000000: ./iojs-after: 263410 ./iojs-before: 213780 ...... 23.22%
querystring/querystring-parse.js type=encodelast n=1000000: ./iojs-after: 284420 ./iojs-before: 194230 ...... 46.44%
querystring/querystring-stringify.js type=noencode n=1000000: ./iojs-after: 983630 ./iojs-before: 610680 .... 61.07%
querystring/querystring-stringify.js type=encodemany n=1000000: ./iojs-after: 857700 ./iojs-before: 187150 . 358.30%
querystring/querystring-stringify.js type=encodelast n=1000000: ./iojs-after: 987650 ./iojs-before: 290730 . 239.72%

Merge request reports

Loading