Skip to content

Benchmarking Zig HTTP client against Rust, Go, Python, C++ and curl

License

Notifications You must be signed in to change notification settings

xwiz/zig-http-benchmarks

 
 

Repository files navigation

zig-http-benchmarks

Read the blog post: Zig Bits 0x4

This repository contains a HTTP server/client implementation using Zig's standard library and benchmarks for comparing the client's performance with implementations in other programming languages such as Rust and Go.

Prerequisites

  • Zig (>=0.11), Rust/Cargo, Go, Python
  • Hyperfine (for benchmarking)

Benchmarking

To run the benchmarks:

chmod +x bench.sh
./bench.sh

The result will be saved to benchmarks.md and benchmarks.json.

  rust-hyper ran
    1.01 ± 0.02 times faster than rust-ureq
    1.01 ± 0.02 times faster than rust-reqwest
    1.24 ± 0.06 times faster than go-http-client
    1.46 ± 0.05 times faster than rust-attohttpc
    2.03 ± 0.05 times faster than zig-http-client
    4.26 ± 0.12 times faster than curl
    8.57 ± 0.12 times faster than python-http-client
   19.93 ± 0.25 times faster than cpp-asio-httpclient
Command Mean [ms] Min [ms] Max [ms] Relative
curl 457.9 ± 11.2 442.4 522.2 4.26 ± 0.12
zig-http-client 218.5 ± 4.8 210.3 240.3 2.03 ± 0.05
rust-attohttpc 157.2 ± 5.3 151.8 190.4 1.46 ± 0.05
rust-hyper 107.6 ± 1.3 104.4 114.8 1.00
rust-reqwest 108.7 ± 2.2 105.4 123.7 1.01 ± 0.02
rust-ureq 108.4 ± 2.3 105.7 123.1 1.01 ± 0.02
go-http-client 133.1 ± 6.2 127.6 159.2 1.24 ± 0.06
python-http-client 921.9 ± 5.9 911.4 947.1 8.57 ± 0.12
cpp-asio-httpclient 2144.5 ± 4.5 2133.0 2168.2 19.93 ± 0.25

Plotting

Use the JSON data along with the scripts from the hyperfine examples to plot data using matplotlib. For example:

git clone --depth 1 https://github.com/sharkdp/hyperfine
python hyperfine/scripts/plot_whisker.py benchmarks.json

plot_whisker

Environment

The results are coming from a GitHub runner (ubuntu-latest) and automated with this workflow.

To see the output for the latest run, check out the output branch in this repository.

License

Licensed under The MIT License.

About

Benchmarking Zig HTTP client against Rust, Go, Python, C++ and curl

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Zig 62.0%
  • C++ 13.1%
  • Rust 12.6%
  • Shell 8.7%
  • Go 2.9%
  • Python 0.7%