Hi!
I noticed that in the Cargo.toml file Link-Time Optimization (LTO) for the project is not enabled. I suggest switching it on since it will reduce the binary size (always a good thing to have) and will likely improve CPU performance a bit due to more aggressive compiler optimizations. Especially since you already enabled for the Napi part. Additionally, codegen-units = 1 (CU1) option can help too in a similar to LTO way, so I recommend to enable it as well - including the Napi part too.
I recommend enabling LTO only for Release builds so developers experience won't be affected by the increased build time. Actually, I can propose to use flags directly from this ripgrep profile (like stripping and other potentially useful for the project switches).
Basically, it can be enabled with the following lines to the root Cargo.toml file:
[profile.release]
codegen-units = 1
lto = true # FatLTO - the most aggressive LTO version
<possible other options like strip = true>
I have made quick tests (AMD Ryzen 9 5900x, Fedora 44, Rust 1.95, cargo build --release and maturin build --release build commands) - here are the results:
| Binary name \ Build Profile |
Current Release |
Release + FatLTO + CU1 |
pdf2md |
6.3 Mib |
5.0 Mib |
detect-pdf |
6.3 Mib |
5.0 Mib |
libpdf_inspector.so |
6.5 Mib |
5.1 Mib |
| Python Wheel |
2.4 Mib |
2.1 Mib |
Clean build time (cargo build --release):
- Current Release: 13s
- Release + FatLTO + CU1: 57s
Clean build time (maturin build --release):
- Current Release: 11s
- Release + FatLTO + CU1: 47s
Build time increase shouldn't be a problem since we enable it only for the Release profile - in this case, we would not affect the development lifecycle. If the proposed settings are added to the Cargo.toml file, all binaries will be built with the new options automatically.
Thank you.
Hi!
I noticed that in the
Cargo.tomlfile Link-Time Optimization (LTO) for the project is not enabled. I suggest switching it on since it will reduce the binary size (always a good thing to have) and will likely improve CPU performance a bit due to more aggressive compiler optimizations. Especially since you already enabled for the Napi part. Additionally,codegen-units = 1(CU1) option can help too in a similar to LTO way, so I recommend to enable it as well - including the Napi part too.I recommend enabling LTO only for Release builds so developers experience won't be affected by the increased build time. Actually, I can propose to use flags directly from this
ripgrepprofile (like stripping and other potentially useful for the project switches).Basically, it can be enabled with the following lines to the root Cargo.toml file:
I have made quick tests (AMD Ryzen 9 5900x, Fedora 44, Rust 1.95,
cargo build --releaseandmaturin build --releasebuild commands) - here are the results:pdf2mddetect-pdflibpdf_inspector.soClean build time (
cargo build --release):Clean build time (
maturin build --release):Build time increase shouldn't be a problem since we enable it only for the Release profile - in this case, we would not affect the development lifecycle. If the proposed settings are added to the Cargo.toml file, all binaries will be built with the new options automatically.
Thank you.