inertiajs / inertia-laravel

The Laravel adapter for Inertia.js.
https://inertiajs.com
MIT License
2.03k stars 227 forks source link

[2.x] Replace md5 with xxhash #653

Open RobertBoes opened 1 month ago

RobertBoes commented 1 month ago

Another attempt of #652

I recently noticed laravel/framework#52301, where most of the md5 calls will be replaced with xxhash, which is much faster than md5. For Inertia's asset versioning we don't need it to be cryptographically correct, but a performance improvement would be nice, especially since the middleware is executed on every request.

I think it's save to change this in the Inertia adapter, since all it would do is force a reload, which would happen when updating assets anyway.

Support for xxhash was added to PHP 8.1 (https://php.watch/versions/8.1/xxHash), so we can safely use this algorithm instead of md5.

RobertBoes commented 1 month ago

Did a bit of testing in an artisan command, especially the md5_file call is quite a bit slower;

Benchmark::dd([
    'md5' => fn() => md5_file(public_path('build/manifest.json')), // around 0.085ms
    'xxhash' => fn() => hash_file('xxh128', public_path('build/manifest.json')), // around 0.040ms
], 1000);

Of course it's not a massive impact, but it's a free improvement