Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Even faster array parsing #20

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

Merged
merged 2 commits into from
Mar 6, 2025
Merged

Conversation

benjie
Copy link
Contributor

@benjie benjie commented Mar 6, 2025

Follow up to #19.

Sorry... once I have a benchmark script... 😬 This one is easier to review at least! String concatenation is faster than array accumulation and join in.

Also it turns out that the performance difference is more stark in Node 22; for some reason the older algorithm is slower in Node 22 than Node 20 - this is probably why you were seeing the 5x!

3.0.1:

$ time node benchmark.js 
To process: 2000 arrays

Parsing 2000 arrays took 2332.4ms (0.9 arrays/ms)

Parsing 2000 arrays took 2322.7ms (0.9 arrays/ms)

Parsing 2000 arrays took 2269.5ms (0.9 arrays/ms)

Parsing 2000 arrays took 2353.7ms (0.8 arrays/ms)

Parsing 2000 arrays took 2318.9ms (0.9 arrays/ms)

Parsing 2000 arrays took 2285.3ms (0.9 arrays/ms)

Parsing 2000 arrays took 2324.4ms (0.9 arrays/ms)

Parsing 2000 arrays took 2270.2ms (0.9 arrays/ms)

Parsing 2000 arrays took 2301.3ms (0.9 arrays/ms)

Parsing 2000 arrays took 2315.4ms (0.9 arrays/ms)

real    0m23.261s
user    0m24.046s
sys     0m0.580s

3.0.2:

$ time node benchmark.js 
To process: 2000 arrays

Parsing 2000 arrays took 608.5ms (3.3 arrays/ms)

Parsing 2000 arrays took 543.8ms (3.7 arrays/ms)

Parsing 2000 arrays took 530.6ms (3.8 arrays/ms)

Parsing 2000 arrays took 532.6ms (3.8 arrays/ms)

Parsing 2000 arrays took 538.5ms (3.7 arrays/ms)

Parsing 2000 arrays took 525.5ms (3.8 arrays/ms)

Parsing 2000 arrays took 519.8ms (3.8 arrays/ms)

Parsing 2000 arrays took 530.5ms (3.8 arrays/ms)

Parsing 2000 arrays took 525.3ms (3.8 arrays/ms)

Parsing 2000 arrays took 522.2ms (3.8 arrays/ms)

real    0m5.524s
user    0m5.456s
sys     0m0.128s

This branch:

$ time node benchmark.js 
To process: 2000 arrays

Parsing 2000 arrays took 543.8ms (3.7 arrays/ms)

Parsing 2000 arrays took 432.8ms (4.6 arrays/ms)

Parsing 2000 arrays took 435.0ms (4.6 arrays/ms)

Parsing 2000 arrays took 428.6ms (4.7 arrays/ms)

Parsing 2000 arrays took 430.8ms (4.6 arrays/ms)

Parsing 2000 arrays took 429.0ms (4.7 arrays/ms)

Parsing 2000 arrays took 426.1ms (4.7 arrays/ms)

Parsing 2000 arrays took 432.4ms (4.6 arrays/ms)

Parsing 2000 arrays took 430.7ms (4.6 arrays/ms)

Parsing 2000 arrays took 429.2ms (4.7 arrays/ms)

real    0m4.568s
user    0m4.629s
sys     0m0.119s

Net: completes in less than a fifth of the time.

@bendrucker bendrucker merged commit 382ea5b into bendrucker:master Mar 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants