Javascript VS Go benchmarks

Current benchmark data was generated on Mon Feb 06 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz (Model 85)

* -m in a file name stands for multi-threading or multi-processing

* -i in a file name stands for direct intrinsics usage. (Usage of simd intrinsics via libraries is not counted)

* -ffi in a file name stands for non-stdlib FFI usage

* (You may find time < time(user) + time(sys) for some non-parallelized programs, the overhead is from GC or JIT compiler, which are allowed to take advantage of multi-cores as that's more close to real-world scenarios.)

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 1.js 1382ms 24ms 246.2MB 1707ms 77ms bun 0.5.5
go 1.go 3238ms 18ms 44.6MB 4600ms 63ms go 1.19.5
javascript 1.js 4218ms 18ms 257.4MB 2980ms 1550ms node 19.6.0
go 1.go 4368ms 14ms 39.4MB 4343ms 10ms tinygo 0.25.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 1.js 132ms 3.3ms 99.7MB 107ms 23ms bun 0.5.5
javascript 1.js 199ms 4.6ms 70.3MB 180ms 20ms node 19.6.0
go 1.go 277ms 2.4ms 8.2MB 353ms 10ms go 1.19.5
go 1.go 391ms 3.0ms 6.6MB 383ms 0ms tinygo 0.25.0

coro-prime-sieve

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 909ms 184ms 13.4MB 1750ms 3ms go 1.19.5
go 1.go 2254ms 7.2ms 253.7MB 2167ms 67ms tinygo 0.25.0
javascript 1.js 2458ms 24ms 80.6MB 2493ms 50ms node 19.6.0
javascript 1.js 3544ms 56ms 112.7MB 3520ms 40ms bun 0.5.5

Input: 1000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-m.go 64ms 6.1ms 5.4MB 103ms 0ms go 1.19.5
javascript 1.js 219ms 2.1ms 62.2MB 200ms 13ms node 19.6.0
javascript 1.js 251ms 1.7ms 104.5MB 257ms 20ms bun 0.5.5
go 1.go 306ms 2.0ms 65.6MB 277ms 13ms tinygo 0.25.0

edigits

Input: 250001

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 168ms 3.0ms 8.3MB 153ms 3ms go 1.19.5
javascript 1.js 381ms 0.2ms 97.6MB 363ms 17ms bun 0.5.5
javascript 1.js 407ms 2.9ms 59.4MB 400ms 20ms node 19.6.0

Input: 100000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 49ms 0.9ms 8.9MB 37ms 0ms go 1.19.5
javascript 1.js 186ms 4.5ms 51.9MB 197ms 7ms node 19.6.0
javascript 1.js 773ms 2.3ms 89.2MB 747ms 23ms bun 0.5.5

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 2.2ms 0.5ms 2.0MB 0ms 0ms tinygo 0.25.0
go 1.go 2.6ms 0.2ms 3.3MB 0ms 0ms go 1.19.5
javascript 1.js 17ms 0.7ms 50.3MB 0ms 10ms bun 0.5.5
javascript 1.js 44ms 1.3ms 42.7MB 28ms 4ms node 19.6.0

http-server

Input: 3000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 1.bun.js 147ms 1.3ms 87.5MB 80ms 70ms bun 0.5.5
go 1-http2.go 193ms 7.2ms 54.4MB 277ms 60ms go 1.19.5
go 2-m.go 688ms 22ms 170.2MB 600ms 493ms go 1.19.5
go 1-m.go 710ms 40ms 175.9MB 710ms 427ms go 1.19.5
javascript 1.js 2127ms 1938ms 161.5MB 1243ms 270ms node 19.6.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1-http2.go 48ms 3.3ms 24.8MB 50ms 10ms go 1.19.5
javascript 1.bun.js 90ms 3.5ms 76.4MB 27ms 27ms bun 0.5.5
go 2.go 141ms 9.7ms 39.4MB 103ms 73ms go 1.19.5
go 1.go 149ms 17ms 38.9MB 103ms 70ms go 1.19.5
javascript 1.js 389ms 4.5ms 69.6MB 363ms 97ms node 19.6.0

json-serde

Input: sample 5000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 80ms 2.9ms 41.7MB 57ms 17ms go 1.19.5
javascript 1.js 139ms 3.9ms 90.9MB 100ms 23ms bun 0.5.5
javascript 1.js 177ms 0.7ms 74.4MB 153ms 20ms node 19.6.0
go 1.go 182ms 1.9ms 18.6MB 167ms 7ms go 1.19.5

Input: canada 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 2-ffi.go 407ms 13ms 164.0MB 380ms 97ms go 1.19.5
javascript 1.js 789ms 1.5ms 249.2MB 753ms 63ms bun 0.5.5
go 1.go 1073ms 7.2ms 103.6MB 1047ms 60ms go 1.19.5
javascript 1.js 1198ms 7.4ms 282.5MB 1133ms 150ms node 19.6.0

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 161ms 1.4ms 0.3MB 150ms 0ms tinygo 0.25.0
go 3.go 168ms 1.8ms 2.9MB 160ms 0ms go 1.19.5
javascript 2.js 367ms 2.4ms 54.8MB 353ms 7ms node 19.6.0
javascript 1.js 626ms 8.5ms 148.8MB 620ms 27ms bun 0.5.5
javascript 2.js 675ms 4.0ms 111.2MB 683ms 20ms bun 0.5.5
javascript 1.js 1009ms 2.2ms 62.1MB 990ms 10ms node 19.6.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 475ms 1.0ms 0.3MB 463ms 0ms tinygo 0.25.0
go 3.go 495ms 1.0ms 4.8MB 480ms 0ms go 1.19.5
javascript 2.js 974ms 4.7ms 62.1MB 950ms 17ms node 19.6.0
javascript 1.js 1782ms 8.6ms 167.2MB 1803ms 47ms bun 0.5.5
javascript 2.js 1934ms 18ms 119.7MB 1930ms 30ms bun 0.5.5
javascript 1.js 2888ms 5.9ms 62.0MB 2860ms 20ms node 19.6.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 3.go 83ms 0.5ms 2.0MB 70ms 0ms tinygo 0.25.0
go 3.go 92ms 1.8ms 4.1MB 80ms 0ms go 1.19.5
javascript 2.js 202ms 3.3ms 49.4MB 187ms 10ms node 19.6.0
javascript 1.js 323ms 3.1ms 118.5MB 307ms 23ms bun 0.5.5
javascript 2.js 367ms 1.1ms 107.2MB 373ms 23ms bun 0.5.5
javascript 1.js 391ms 2.7ms 50.4MB 373ms 7ms node 19.6.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 1.js 829ms 3.5ms 151.0MB 913ms 43ms bun 0.5.5
javascript 1.js 958ms 10ms 122.6MB 987ms 53ms node 19.6.0
go 1.go 2223ms 27ms 40.1MB 3083ms 63ms go 1.19.5
go 2.go 2469ms 6.5ms 41.8MB 3500ms 63ms go 1.19.5
go 1.go 4230ms 3.2ms 212.7MB 4150ms 60ms tinygo 0.25.0
go 2.go timeout 0.0ms 68.9MB 4973ms 7ms tinygo 0.25.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
javascript 1.js 191ms 2.1ms 108.8MB 173ms 17ms bun 0.5.5
javascript 1.js 268ms 2.1ms 90.5MB 250ms 30ms node 19.6.0
go 1.go 474ms 6.1ms 12.5MB 633ms 20ms go 1.19.5
go 2.go 528ms 6.9ms 13.6MB 730ms 13ms go 1.19.5
go 1.go 732ms 1.3ms 52.2MB 703ms 7ms tinygo 0.25.0
go 2.go 1428ms 1.8ms 38.9MB 1403ms 3ms tinygo 0.25.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 514ms 14ms 4.9MB 500ms 0ms go 1.19.5
javascript 6.js 690ms 0.8ms 47.8MB 673ms 10ms node 19.6.0
go 1.go 705ms 0.8ms 0.0MB 697ms 0ms tinygo 0.25.0
javascript 6.js 1031ms 11ms 70.5MB 1017ms 13ms bun 0.5.5

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 1.go 59ms 3.3ms 2.9MB 47ms 0ms go 1.19.5
go 1.go 73ms 0.5ms 0.0MB 63ms 0ms tinygo 0.25.0
javascript 6.js 116ms 1.6ms 48.3MB 103ms 3ms node 19.6.0
javascript 6.js 125ms 1.1ms 67.1MB 110ms 13ms bun 0.5.5

secp256k1

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 0-ffi.go 151ms 1.1ms 9.2MB 137ms 3ms go 1.19.5
javascript 1.js 3800ms 8.2ms 105.6MB 3820ms 23ms bun 0.5.5
javascript 1.js 3968ms 20ms 52.3MB 3973ms 10ms node 19.6.0

Input: 500

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 0-ffi.go 51ms 1.8ms 9.7MB 37ms 0ms go 1.19.5
javascript 1.js 980ms 3.5ms 101.9MB 977ms 30ms bun 0.5.5
javascript 1.js 1034ms 6.4ms 50.2MB 1027ms 13ms node 19.6.0

pidigits

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 1421ms 7.6ms 8.5MB 1393ms 7ms go 1.19.5
javascript 3.js timeout 0.0ms 79.3MB 4980ms 27ms node 19.6.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 8.go 348ms 4.5ms 8.5MB 327ms 3ms go 1.19.5
javascript 3.js 1595ms 5.1ms 62.9MB 1583ms 20ms node 19.6.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 2235ms 18ms 5.4MB 4320ms 3ms go 1.19.5
javascript 6-m.js 2799ms 6.7ms 74.5MB 5250ms 23ms node 19.6.0
go 1.go 4404ms 4.0ms 5.5MB 4393ms 3ms go 1.19.5
go 1.go timeout 0.0ms 0.4MB 4987ms 0ms tinygo 0.25.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 577ms 7.0ms 2.9MB 1083ms 0ms go 1.19.5
javascript 6-m.js 850ms 17ms 69.1MB 1493ms 27ms node 19.6.0
go 1.go 1114ms 1.2ms 2.9MB 1103ms 0ms go 1.19.5
go 1.go timeout 0.0ms 0.0MB 4983ms 0ms tinygo 0.25.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
go 4-m.go 152ms 2.2ms 2.9MB 270ms 0ms go 1.19.5
go 1.go 284ms 2.4ms 2.9MB 270ms 0ms go 1.19.5
javascript 6.js 416ms 8.1ms 67.4MB 547ms 23ms node 19.6.0
go 1.go 1642ms 4.7ms 0.0MB 1630ms 0ms tinygo 0.25.0