How It Works
The idea behind the hashed asset path technique is pretty simple: give each version of an asset its own special identifier, usually a hash, and attach it to the asset's URL. This hash is generated based on the content or modification time of the asset file. This way, every change to the file results in a new URL, ensuring users always get the latest version.
Let's take a look at a PHP function that uses laravel asset
function to generate the asset url:
/** * Generate a hashed asset path. */ function hashed_asset(string $path, bool $secure = null): string { $hash = null; $realPath = public_path($path); if (file_exists($realPath)) { $hash = md5(filemtime($realPath)); } return asset($path, $secure) . ($hash ? '?v=' . $hash : ''); }
As you can see, this PHP function named hashed_asset
takes in a file path and an optional boolean parameter indicating whether the asset should be served securely or not. It then computes a hash based on the last modified time of the file located at the given path using the filemtime function. If the file exists, it generates the asset URL using Laravel's asset function and appends the computed hash as a query parameter to ensure cache busting.
You can use this function something like that:
<link rel="stylesheet" href="{{ hashed_asset('css/main.css') }}" />
How It Helps
-
Cache Invalidation: By changing the hash whenever the asset file is modified, we ensure that users always get the newest version, avoiding any outdated content problems.
-
Efficient Caching: CDNs and Service Workers can cache assets based on their unique URLs. This means less strain on servers and faster loading times for users.
-
Better User Experience: Users get quicker access to up-to-date content, making for a smoother browsing experience overall.
Wrapping Up
Making sure each version of your assets is unique is essential for keeping your site running smoothly. By using the hashed asset path technique, you can avoid issues with outdated content and improve performance. Whether you're working on a small site or a big web app, this simple approach can make a big difference.
Do you use similar methods for managing asset versions in your projects? Let me know on Twitter!