Skip to content

Instantly share code, notes, and snippets.

@pquentin
Created December 2, 2024 19:21
Show Gist options
  • Save pquentin/0562350ae1db29e3ac46668c35040a36 to your computer and use it in GitHub Desktop.
Save pquentin/0562350ae1db29e3ac46668c35040a36 to your computer and use it in GitHub Desktop.
Parsing a JSON file using Serde in Rust

Benchmark results

Using a M3 MacBook.

from_file

❯ hyperfine target/release/json-rust --warmup 5 --runs 10
Benchmark 1: target/release/json-rust
  Time (mean ± σ):      8.475 s ±  0.020 s    [User: 1.872 s, System: 6.595 s]
  Range (min … max):    8.454 s …  8.507 s    10 runs

from_buffered_file

❯ hyperfine target/release/json-rust --warmup 10
Benchmark 1: target/release/json-rust
  Time (mean ± σ):      59.4 ms ±   1.8 ms    [User: 52.0 ms, System: 6.1 ms]
  Range (min … max):    57.4 ms …  63.5 ms    48 runs

from_string

❯ hyperfine target/release/json-rust --warmup 100
Benchmark 1: target/release/json-rust
  Time (mean ± σ):      24.0 ms ±   0.5 ms    [User: 17.5 ms, System: 6.0 ms]
  Range (min … max):    23.0 ms …  26.2 ms    107 runs
use serde_json::{Map, Value};
use std::fs::File;
use std::io::BufReader;
fn from_file(path: &str) -> Map<String, Value> {
let f = File::open(path).unwrap();
serde_json::from_reader(f).unwrap()
}
fn from_buffered_file(path: &str) -> Map<String, Value> {
let br = BufReader::new(File::open(path).unwrap());
serde_json::from_reader(br).unwrap()
}
fn from_string(path: &str) -> Map<String, Value> {
let s = std::fs::read_to_string(path).unwrap();
serde_json::from_str(&s).unwrap()
}
fn main() {
let path = "vendor2.js.map";
// from_file(path);
// from_buffered_file(path);
from_string(path);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment