This is a port of php-kiss-varint package into the PHP extension by using Rust.
The work is still in progress but it works! and benchmarks are great as we can see for now.
Here are benchmarks vs php-kiss-varint package
The numbers are avg for a single call on 1 mln runs
| test | time | perf increased |
|---|---|---|
| 🐘 Composer package packUint (> PHP_INT_MAX) | 0.000001493 | 1x |
| 🦀 PHP extension packUint (> PHP_INT_MAX): | 0.000000174 | 8.58x |
| 🐘 Composer package packUintHex (> PHP_INT_MAX) | 0.000001495 | 1x |
| 🦀 PHP extension packUint & bin2hex (> PHP_INT_MAX): | 0.000000188 | 7.95x |
| 🐘 Composer package packUint (= PHP_INT_MAX) | 0.000001157 | 1x |
| 🦀 PHP extension packUint (= PHP_INT_MAX): | 0.000000181 | 6.39x |
| 🐘 Composer package packUint & bin2hex (= PHP_INT_MAX) | 0.000001200 | 1x |
| 🦀 PHP extension packUintHex (= PHP_INT_MAX): | 0.000000192 | 6.25x |
| 🐘 Composer package packInt – negative | 0.000003072 | 1x |
| 🦀 PHP extension packInt – negative | 0.000000153 | 20.07x |
| 🐘 Composer package packInt & bin2hex - negative | 0.000003130 | 1x |
| 🦀 PHP extension packIntHex - negative | 0.000000167 | 18.74x |
| 🐘 Composer package packInt – positive | 0.000002064 | 1x |
| 🦀 PHP extension packInt – positive | 0.000000153 | 13.49x |
| 🐘 Composer package packInt & bin2hex - positive | 0.000002108 | 1x |
| 🦀 PHP extension packIntHex - positive | 0.000000168 | 12.54x |
| 🐘 Composer package readUint & hex2bin | 0.000001563 | 1x |
| 🦀 PHP extension readUintHex | 0.000000336 | 4.65x |
| 🐘 Composer package readInt & hex2bin | 0.000003037 | 1x |
| 🦀 PHP extension readIntHex | 0.000000229 | 13.26x |
Just make sure that you have rust installed and run this command
cargo install cargo-php
cargo php install --releaseMake sure that you have included it by using adding it to the php.ini file or a separate extension file
extension=libphp_ext_varint.soYou also can generate stubs to your IDE by running
cargo php stubs --stdout > stubs/VarInt.php