This is an automated email from the ASF dual-hosted git repository. chaokunyang pushed a commit to branch update_benchmakr in repository https://gitbox.apache.org/repos/asf/fory-site.git
commit 8d5907a23fe9d8996959103f7205742ff48bc438 Author: chaokunyang <[email protected]> AuthorDate: Tue Oct 28 00:57:19 2025 +0800 add rust benchmark --- blog/2025-10-27-fory_0_13_0_release.md | 39 +++++++++++++++++++++++++++++++--- docs/docs/introduction/benchmark.md | 14 +++++++++++- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/blog/2025-10-27-fory_0_13_0_release.md b/blog/2025-10-27-fory_0_13_0_release.md index bab4a05e8..5a1e1f2ad 100644 --- a/blog/2025-10-27-fory_0_13_0_release.md +++ b/blog/2025-10-27-fory_0_13_0_release.md @@ -32,7 +32,7 @@ This is the first Apache Fory Rust release, delivering a complete, high‑perfor - Thread-safe and multi-thread capable serialization (context pool) - Broad collection support (e.g., `VecDeque`, `LinkedList`, `BTreeMap`, `BTreeSet`, `BinaryHeap`) -Quick start (minimal example): +### Quick start (minimal example): ```rust use fory::{Fory, Error}; @@ -61,6 +61,39 @@ fn main() -> Result<(), Error> { - Crate: fory on crates.io – https://crates.io/crates/fory - API docs: docs.rs – https://docs.rs/fory/latest/fory +### Rust Benchmarks + +<img src="/img/benchmarks/rust/ecommerce_data.png" width="90%"/> +<img src="/img/benchmarks/rust/system_data.png" width="90%"/> + +Below are serialize throughput results (TPS; higher is better) comparing Fory with JSON and Protobuf across multiple datasets and sizes. + +| Datatype | Size | Operation | Fory TPS | JSON TPS | Protobuf TPS | Fastest | +| -------------- | ------ | --------- | ---------- | ---------- | ------------ | ------- | +| company | small | serialize | 10,063,906 | 761,673 | 896,620 | fory | +| company | medium | serialize | 412,507 | 33,835 | 37,590 | fory | +| company | large | serialize | 9,183 | 793 | 880 | fory | +| ecommerce_data | small | serialize | 2,350,729 | 206,262 | 256,970 | fory | +| ecommerce_data | medium | serialize | 59,977 | 4,699 | 5,242 | fory | +| ecommerce_data | large | serialize | 3,727 | 266 | 295 | fory | +| person | small | serialize | 13,632,522 | 1,345,189 | 1,475,035 | fory | +| person | medium | serialize | 3,839,656 | 337,610 | 369,031 | fory | +| person | large | serialize | 907,853 | 79,631 | 91,408 | fory | +| simple_list | small | serialize | 27,726,945 | 4,874,957 | 4,643,172 | fory | +| simple_list | medium | serialize | 4,770,765 | 401,558 | 397,551 | fory | +| simple_list | large | serialize | 606,061 | 41,061 | 44,565 | fory | +| simple_map | small | serialize | 22,862,369 | 3,888,025 | 2,695,999 | fory | +| simple_map | medium | serialize | 2,128,973 | 204,319 | 193,132 | fory | +| simple_map | large | serialize | 177,847 | 18,419 | 18,668 | fory | +| simple_struct | small | serialize | 35,729,598 | 10,167,045 | 8,633,342 | fory | +| simple_struct | medium | serialize | 34,988,279 | 9,737,098 | 6,433,350 | fory | +| simple_struct | large | serialize | 31,801,558 | 4,545,041 | 7,420,049 | fory | +| system_data | small | serialize | 5,382,131 | 468,033 | 569,930 | fory | +| system_data | medium | serialize | 174,240 | 11,896 | 14,753 | fory | +| system_data | large | serialize | 10,671 | 876 | 1,040 | fory | + +Note: Results depend on hardware, dataset, and implementation versions. See the Rust guide for how to run benchmarks yourself: https://github.com/apache/fory/blob/main/rust/benches/README.md + ## Python: Drop‑in Replacement for pickle `pyfory` now acts as a high‑performance drop‑in replacement for `pickle`/`cloudpickle`, while keeping the same simple API and adding security and performance features. @@ -107,7 +140,7 @@ Read more: Python Guide – https://fory.apache.org/docs/latest/python_serializa - feat(Rust): support Option in MetaFieldType se/de by @urlyy in https://github.com/apache/fory/pull/2528 - feat(rust): support skipping fields bytes when deserializing in compatible mode by @urlyy in https://github.com/apache/fory/pull/2545 - feat(go): add type meta encoding for meta share by @junjiexh in https://github.com/apache/fory/pull/2554 -- feat(Rust): Support automatic conversion between T and Option<T> when deserialize by @urlyy in https://github.com/apache/fory/pull/2563 +- feat(Rust): Support automatic conversion between T and `Option<T>` when deserialize by @urlyy in https://github.com/apache/fory/pull/2563 - feat(java): bean encoder implemented interfaces honor `@Ignore` by @stevenschlansker in https://github.com/apache/fory/pull/2576 - refactor(java): refactor fory java exception hierarchical structure by @chaokunyang in https://github.com/apache/fory/pull/2577 - feat(Go): Implement ahead of time codegen for fory-go serialization by @ThisingL in https://github.com/apache/fory/pull/2553 @@ -151,7 +184,7 @@ Read more: Python Guide – https://fory.apache.org/docs/latest/python_serializa - refactor(Rust): Refine api name by @urlyy in https://github.com/apache/fory/pull/2671 - feat(rust): support rust dyn trait object serialization by @chaokunyang in https://github.com/apache/fory/pull/2691 - feat(rust): support dyn any trait object serialization for box/arc/rc by @chaokunyang in https://github.com/apache/fory/pull/2704 -- feat(rust): support shared reference tracking for arc/rc<dny T> by @chaokunyang in https://github.com/apache/fory/pull/2707 +- feat(rust): support shared reference tracking for `arc/rc<dyn T>` by @chaokunyang in https://github.com/apache/fory/pull/2707 - feat(rust): avoid downcast method of multiple trait objects in same module conflict by @chaokunyang in https://github.com/apache/fory/pull/2708 - feat(rust): add deref to arc/rc wrapper by @chaokunyang in https://github.com/apache/fory/pull/2709 - refactor(rust): unify rc/arc wrapper macro arms into one function by @chaokunyang in https://github.com/apache/fory/pull/2711 diff --git a/docs/docs/introduction/benchmark.md b/docs/docs/introduction/benchmark.md index ba00a0fd0..192dfa9cc 100644 --- a/docs/docs/introduction/benchmark.md +++ b/docs/docs/introduction/benchmark.md @@ -12,6 +12,8 @@ Dynamic serialization frameworks supports polymorphism and reference, which has to static serialization frameworks, unless it uses the jit techniques as Apache Fory™ did. Since Apache Fory™ will generate code at runtime, please warm up before collecting benchmark statistics. +## Java Benchmark + ### Java Serialization <img width="33%" alt="" src="/img/benchmarks/serialization/bench_serialize_compatible_STRUCT_to_directBuffer_tps.png" /> @@ -28,7 +30,17 @@ Since Apache Fory™ will generate code at runtime, please warm up before collec See [benchmarks](https://github.com/apache/fory/tree/main/docs/benchmarks) for more benchmarks about type forward/backward compatibility, off-heap support, zero-copy serialization. -### JavaScript +## Rust Benchmark + +<img src="/img/benchmarks/rust/company.png" width="90%"/> + +<img src="/img/benchmarks/rust/ecommerce_data.png" width="90%"/> + +<img src="/img/benchmarks/rust/system_data.png" width="90%"/> + +Note: Results depend on hardware, dataset, and implementation versions. See the Rust guide for how to run benchmarks yourself: https://github.com/apache/fory/blob/main/rust/benches/README.md + +## JavaScript Benchmark <img width="33%" alt="" src="/img/benchmarks/javascript/complex_object.jpg" /> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
