orhun / zig-http-benchmarks

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

Home Page:https://blog.orhun.dev/zig-bits-04/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

https://blog.orhun.dev/zig-bits-04/

License:MIT License


Languages

Language:Zig 61.8%Language:C++ 13.1%Language:Rust 12.6%Language:Shell 8.8%Language:Go 2.9%Language:Python 0.7%