Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

querystring: rebalance the performance of unescape #49687

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

Uzlopak
Copy link
Contributor

@Uzlopak Uzlopak commented Sep 17, 2023

This is a more subjective change.

Yes, it is better to optimize the performance for the valid values. But we should atleast talk about a potential rebalance, because the invalid cases are by a magnitude to the power of 10 slower.

Main:

aras@aras-Lenovo-Legion-5-17ARH05H:~/workspace/node$ ./node benchmark/querystring/querystring-unescape
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="there is nothing to unescape here": 4,113,106.929616375
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="there is nothing to unescape here": 4,089,343.3686964614
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="there+are+spaces+to+unescape+here": 4,274,766.056566554
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="there+are+spaces+to+unescape+here": 4,061,408.8115218435
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="there%20are%20several%20spaces%20that%20need%20to%20be%20unescaped": 3,510,995.446936891
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="there%20are%20several%20spaces%20that%20need%20to%20be%20unescaped": 3,460,418.298049153
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="%20%21%22%23%24%25%26%27%28%29%2A%2B%2C%2D%2E%2F%30%31%32%33%34%35%36%37": 3,869,361.695712258
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="%20%21%22%23%24%25%26%27%28%29%2A%2B%2C%2D%2E%2F%30%31%32%33%34%35%36%37": 3,775,579.0810461766
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="there%2Qare%0-fake%escaped values in%%%%this%9Hstring": 215,872.0410033765
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="there%2Qare%0-fake%escaped values in%%%%this%9Hstring": 213,378.59760950686
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="there%2Qare%0-fake%escaped%20values in%%%%this%9Hstring": 207,500.03947543
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="there%2Qare%0-fake%escaped%20values in%%%%this%9Hstring": 205,365.56867032265
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="%%2a": 223,229.9520471313
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="%%2a": 223,690.59260464486
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="%2sf%2a": 227,860.16645240664
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="%2sf%2a": 225,300.9021186388
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="%2%2af%2a": 225,509.4556772351
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="%2%2af%2a": 225,241.08518054444
aras@aras-Lenovo-Legion-5-17ARH05H:~/workspace/node$ ./node benchmark/querystring/querystring-parse.js 
querystring/querystring-parse.js n=1000000 type="noencode": 2,177,571.164212423
querystring/querystring-parse.js n=1000000 type="multicharsep": 1,739,568.2493195976
querystring/querystring-parse.js n=1000000 type="encodefake": 2,085,370.2926235178
querystring/querystring-parse.js n=1000000 type="encodemany": 802,063.171478715
querystring/querystring-parse.js n=1000000 type="encodelast": 1,556,455.2942840066
querystring/querystring-parse.js n=1000000 type="multivalue": 1,571,969.2554190147
querystring/querystring-parse.js n=1000000 type="multivaluemany": 632,386.2968473879
querystring/querystring-parse.js n=1000000 type="manypairs": 482,585.1627748775
querystring/querystring-parse.js n=1000000 type="manyblankpairs": 9,688,510.230044665
querystring/querystring-parse.js n=1000000 type="altspaces": 1,283,259.4807236101

PR:

aras@aras-Lenovo-Legion-5-17ARH05H:~/workspace/node$ ./node benchmark/querystring/querystring-unescape
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="there is nothing to unescape here": 100,427,336.39327392
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="there is nothing to unescape here": 97,391,355.97371358
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="there+are+spaces+to+unescape+here": 102,242,459.32212186
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="there+are+spaces+to+unescape+here": 99,328,034.91769794
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="there%20are%20several%20spaces%20that%20need%20to%20be%20unescaped": 2,633,501.5164387757
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="there%20are%20several%20spaces%20that%20need%20to%20be%20unescaped": 2,682,782.847191968
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="%20%21%22%23%24%25%26%27%28%29%2A%2B%2C%2D%2E%2F%30%31%32%33%34%35%36%37": 2,499,892.974581972
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="%20%21%22%23%24%25%26%27%28%29%2A%2B%2C%2D%2E%2F%30%31%32%33%34%35%36%37": 2,480,777.7518877746
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="there%2Qare%0-fake%escaped values in%%%%this%9Hstring": 3,861,793.8289530952
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="there%2Qare%0-fake%escaped values in%%%%this%9Hstring": 3,967,029.210953804
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="there%2Qare%0-fake%escaped%20values in%%%%this%9Hstring": 1,459,010.40988068
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="there%2Qare%0-fake%escaped%20values in%%%%this%9Hstring": 1,502,679.3505376268
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="%%2a": 1,779,846.2099925526
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="%%2a": 1,825,411.7980473512
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="%2sf%2a": 1,774,107.3798485843
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="%2sf%2a": 1,791,908.5580977711
querystring/querystring-unescape.js decodeSpaces=1 n=10000000 input="%2%2af%2a": 1,281,074.3418205427
querystring/querystring-unescape.js decodeSpaces=0 n=10000000 input="%2%2af%2a": 1,292,793.9636541568
aras@aras-Lenovo-Legion-5-17ARH05H:~/workspace/node$ ./node benchmark/querystring/querystring-parse.js 
querystring/querystring-parse.js n=1000000 type="noencode": 2,121,496.3342187502
querystring/querystring-parse.js n=1000000 type="multicharsep": 1,651,250.577514569
querystring/querystring-parse.js n=1000000 type="encodefake": 1,880,046.3216340984
querystring/querystring-parse.js n=1000000 type="encodemany": 686,176.5092676014
querystring/querystring-parse.js n=1000000 type="encodelast": 1,427,965.3511176023
querystring/querystring-parse.js n=1000000 type="multivalue": 1,568,195.285878574
querystring/querystring-parse.js n=1000000 type="multivaluemany": 628,898.464937145
querystring/querystring-parse.js n=1000000 type="manypairs": 509,180.7333122751
querystring/querystring-parse.js n=1000000 type="manyblankpairs": 9,802,497.611694977
querystring/querystring-parse.js n=1000000 type="altspaces": 1,254,499.2616017347

@nodejs-github-bot nodejs-github-bot added needs-ci PRs that need a full CI run. querystring Issues and PRs related to the built-in querystring module. labels Sep 17, 2023
@anonrig
Copy link
Member

anonrig commented Sep 17, 2023

@Uzlopak Can you share the output of node benchmark/compare.js and later ran it with node-benchmarks-compare npm package?

@rluvaton
Copy link
Member

@rluvaton rluvaton added performance Issues and PRs related to the performance of Node.js. needs-benchmark-ci PR that need a benchmark CI run. labels Sep 17, 2023
@Uzlopak Uzlopak marked this pull request as draft September 19, 2023 16:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
needs-benchmark-ci PR that need a benchmark CI run. needs-ci PRs that need a full CI run. performance Issues and PRs related to the performance of Node.js. querystring Issues and PRs related to the built-in querystring module.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants