温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

laravel静态文件如何缓存清除

发布时间:2023-04-08 11:03:49 来源:亿速云 阅读:113 作者:iii 栏目:编程语言

本篇内容介绍了“laravel静态文件如何缓存清除”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

原理

首先,让我们看看浏览器如何缓存静态文件。浏览器会为发起的静态文件请求创建一个标识符 (ETag),然后将此标识符与静态文件一起保存到缓存中。每次浏览器再次请求相同的文件时,它将向服务器发送该文件的标识符,并使用该标识符验证缓存。如果标识符匹配,浏览器将从缓存中提取文件。

虽然浏览器缓存是在用户电脑本地完成的,但在 Laravel 应用程序中,我们可以通过更改静态文件的 URL 或添加其它查询参数来干扰浏览器缓存。这意味着每次修改静态文件时,我们可以更改其 URL 或添加查询参数,以确保浏览器会获取新的文件,而不是使用缓存的旧文件。

接下来,我们将看到如何实现这一目标。

Laravel 静态文件缓存清除方法

方法一:手动更改 URL 或添加查询参数

手动更改静态文件的 URL 或添加查询参数是一种简单的缓存清除方法。例如,我们可以在引用 CSS 文件时,将其 URL 更改为:

<link rel="stylesheet" href="style.css?v=1">

这会告诉浏览器请求该文件时,添加 ?v=1 作为查询参数。如果我们想更新文件,可以将查询参数更改为 ?v=2 或任何其他值。每次修改文件时,都需要更新 URL 或添加新的查询参数。

尽管这种方法相对简单,但需要手动更新每个文件的 URL 或添加查询参数,非常费时费力。

方法二:使用 Mix 和版本控制

Laravel Mix 是 Laravel 的一个前端构建工具,它允许您使用许多流行的前端工具来编译、压缩和打包 CSS、JavaScript、图片和字体等文件。Mix 可以帮助您自动生成静态文件 URL,并在每次构建时更改版本号,以确保浏览器获取最新的文件。

要使用 Mix,我们需要先安装 Laravel Mix:

npm install laravel-mix --save-dev

然后,在 webpack.mix.js 文件中定义静态文件和版本:

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

运行 npm run devnpm run prod 可以生成具有版本号的文件。例如,如果我们编译 app.css 文件,它将生成 app.css?id=48d24b 文件,其中 48d24b 是文件的哈希值。每次修改文件时,Laravel Mix 将使用新的哈希值生成新的版本。

要在 HTML 文件中使用 Mix 生成的静态文件 URL,可以使用以下代码:

<link rel="stylesheet" href="{{ mix('css/app.css') }}">

这会自动将文件名转换为带有版本号的文件名。例如,如果我们运行 npm run prod,则上面的代码将生成以下结果:

<link rel="stylesheet" href="/css/app.css?id=48d24b">

通过使用 Laravel Mix,我们无需手动更改文件的 URL 或添加查询参数。Laravel Mix 将自动为我们生成新的版本号,并更改静态文件的 URL。

方法三:使用缓存清除中间件

Laravel 缓存清除中间件允许我们在每次请求时清除浏览器缓存。要使用缓存清除中间件,我们可以在 app/Http/Middleware/CacheControl.php 中创建以下代码:

<?php

namespace App\Http\Middleware;

use Closure;

class CacheControl
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        $response->header('Cache-Control', 'nocache, no-store, max-age=0, must-revalidate');
        $response->header('Pragma', 'no-cache');
        $response->header('Expires', 'Fri, 01 Jan 1990 00:00:00 GMT');

        return $response;
    }
}

然后,在 app/Http/Kernel.php 中注册中间件:

protected $middleware = [
    // ...
    \App\Http\Middleware\CacheControl::class,
];

现在,每次浏览器请求静态文件时,它将向服务器发送一个新的请求,而不是使用缓存,确保我们始终获得最新的文件。

“laravel静态文件如何缓存清除”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI