Performance Benchmarks

Comparing 1ls with jq and fx across various operations and data sizes.

  • Runs per test: 5
  • Data sizes: 1000, 10000, 100000 records
  • Environment: Docker (debian:bookworm-slim)

Summary

ToolAvg Time (ms)vs 1ls
1ls0.621x
jq103.17166x slower
fx171.61276x slower

1ls is 166x faster than jq and 276x faster than fx on average.

Lower is better. Times in milliseconds (ms).

Basic Operations (ms)

OperationSizejqfx1ls
First element100021.267.790.60
Length100021.266.910.53
Last element100046.027.670.47
First element1000032.2241.500.47
Length1000031.5838.550.47
Last element1000031.1639.530.50
First element100000158.56382.210.64
Length100000188.74351.790.56
Last element100000159.04355.600.52

Filter & Map (ms)

OperationSizejqfx1ls
Filter100020.739.490.47
Map100019.285.890.43
Filter+Map100019.786.280.54
Filter1000047.0265.210.48
Map1000034.3544.060.53
Filter+Map1000037.5244.580.56
Filter100000294.43824.560.68
Map100000208.42395.500.76
Filter+Map100000208.05401.710.54

Aggregation (ms)

OperationSizejqfx1ls
Sum100020.906.210.59
Min100020.667.210.61
Max100020.907.370.57
Sum1000036.9843.530.46
Min1000035.8644.540.54
Max1000036.4444.450.71
Sum100000227.80397.980.65
Min100000205.29396.930.50
Max100000194.16388.880.49

Builtin Functions (ms)

OperationSizejqfx1ls
head()100019.936.550.49
last()100019.885.920.46
take(10)100019.975.620.44
uniq()100020.798.340.42
flatten()100021.539.900.46
head()1000031.3440.230.48
last()1000031.8138.050.54
take(10)1000031.0037.690.46
uniq()1000047.0061.050.48
flatten()1000052.0788.380.62
head()100000171.62353.110.49
last()100000158.29359.100.59
take(10)100000151.69351.130.49
uniq()100000355.20576.730.53
flatten()100000370.08760.430.51

Nested Data Operations (ms)

OperationSizejqfx1ls
Deep access100020.335.200.65
Recursive descent100024.4010.370.57
keys()100020.585.850.56
Deep access1000034.5434.570.51
Recursive descent1000066.2567.840.53
keys()1000034.2779.350.83
Deep access100000179.59312.420.50
Recursive descent100000507.34614.310.46
keys()100000188.50317.640.46

String Operations (ms)

OperationSizejqfx1ls
split()100020.497.990.47
startswith()100020.336.470.48
split()1000040.2561.610.53
startswith()1000035.7144.980.56
split()100000238.15523.840.46
startswith()100000188.22383.310.48

Run pnpm run test:bench to regenerate these benchmarks.