Skip to content
This repository has been archived by the owner on Feb 18, 2024. It is now read-only.

Improved perf of deserializing integers from json (30%) #340

Merged
merged 1 commit into from
Aug 26, 2021

Conversation

jorgecarleitao
Copy link
Owner

The following bench,

use criterion::{criterion_group, criterion_main, Criterion};

fn add_benchmark(c: &mut Criterion) {
    let a = serde_json::json!(1);

    c.bench_function("json_f64", |b| {
        b.iter(|| {
            a.as_f64().and_then(num::cast::cast::<f64, i64>).unwrap();
        })
    });

    c.bench_function("json_i64", |b| {
        b.iter(|| {
            a.as_i64().and_then(num::cast::cast::<i64, i64>).unwrap();
        })
    });
}

criterion_group!(benches, add_benchmark);
criterion_main!(benches);

yields

json_f64                time:   [3.6079 ns 3.6164 ns 3.6274 ns]
json_i64                time:   [2.7989 ns 2.8087 ns 2.8214 ns]

showing a 30% difference between casting to float and then to integer vs casting to integer directly (and this is independent of i64 or i32.

The code change follows from this observation: all integer types use as_i64 instead of as_f64.

@jorgecarleitao jorgecarleitao added the enhancement An improvement to an existing feature label Aug 25, 2021
@codecov
Copy link

codecov bot commented Aug 25, 2021

Codecov Report

Merging #340 (4b1b44f) into main (f79ae3e) will decrease coverage by 0.00%.
The diff coverage is 58.82%.

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #340      +/-   ##
==========================================
- Coverage   80.97%   80.97%   -0.01%     
==========================================
  Files         326      326              
  Lines       21167    21224      +57     
==========================================
+ Hits        17141    17186      +45     
- Misses       4026     4038      +12     
Impacted Files Coverage Δ
src/io/json/read/deserialize.rs 75.75% <58.82%> (+0.95%) ⬆️
src/io/json/read/reader.rs 74.32% <0.00%> (-1.36%) ⬇️
tests/it/io/csv/read.rs 100.00% <0.00%> (ø)
src/array/equal/mod.rs 91.26% <0.00%> (+1.58%) ⬆️
src/io/csv/read/deserialize.rs 60.28% <0.00%> (+4.03%) ⬆️
src/io/json_integration/write.rs 6.25% <0.00%> (+6.25%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f79ae3e...4b1b44f. Read the comment docs.

@jorgecarleitao jorgecarleitao merged commit 81ec49c into main Aug 26, 2021
@jorgecarleitao jorgecarleitao deleted the json_int branch August 26, 2021 08:14
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement An improvement to an existing feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant