使用 Laravel 进行缓存清除

Cache Busting with Laravel

我一直在开发一个系统,每次更新 public 文件夹中的任何内容时,每台计算机都必须始终清除缓存才能生效。

我只是直接在 public 文件夹中为 js 和 css 文件编码。当我将它推送到我的 git 存储库并通过 ssh 将它拉到我们的共享主机时,我也通过 ssh 将它复制到 public_html 文件夹,所有客户端计算机仍然需要手动清除它们的缓存新 public 文件生效的命令。我一直在研究一些 laravel 组合,但我仍然不确定如何在现场托管中实际使用它。

我不确定此时缓存清除是否是正确的术语,但我希望每次更新系统时我的客户端计算机都使用最新的资产。

Laravel 有一个 built-in 系统来编译像 CSS 和 JavaScript 这样的资产,includes a versioning system 确保当你推送新版本时,用户接收那些更新的资产。

mix.js('resources/js/app.js', 'public/js')
   .version();

您可以在 css 和 js 文件中包含一个版本。

<link rel="stylesheet" href="{{asset('css/style.css?v=3.0')}}"> //specific versioning
<link rel="stylesheet" href="{{asset('css/style.css?v='.rand(1,99))}}"> //random .. every it treats as a new file

另一种快速而肮脏的缓存清除方法是使用文件的最后修改时间戳作为版本字符串。这样,如果您更新文件,时间戳也会更改。 PHP 对此有 filemtime 方法。

我一直在 Wordpress 中使用它,但在 Laravel blade 模板中它看起来像这样:

<script src="{{ asset('js/scripts.js') }}?ver={{ filemtime(public_path('js/scripts.js')) }}"></script>

我建议使用 built-in Laravel way,因为它还有很多其他优点。但是这个技巧的原理在许多其他情况下都可以派上用场。