【问题标题】:Cache Busting with Laravel使用 Laravel 清除缓存
【发布时间】:2019-10-14 13:28:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript css laravel public-html


    【解决方案1】:

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

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

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

    我确实推荐使用built-in Laravel way,因为它还有很多其他优势。但这个技巧的原理在许多其他情况下也很有用。

    【讨论】:

    • 使用Laravel自带的方式有什么好处?
    • 另外,为了避免泄露上次修改的时间,可以使用例如散列值md5 或更安全的东西,例如 bcrypt
    【解决方案2】:

    Laravel 有一个用于编译 CSS 和 JavaScript 等资产的内置系统,includes a versioning system 可确保当您推送新版本时,用户会收到这些更新后的资产。

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

    【讨论】:

    • 我目前正在使用共享主机。我仍然不确定我将如何尝试它,但我现在理解它的方式似乎 npm run production 会将所有文件编译到项目公共文件夹而不是根目录(public_html)
    • @LEADIT 您可以在本地执行npm run production,然后将public 文件放在服务器的public_html 文件夹中。不过,我通常不建议在共享主机上运行 Laravel。
    • 是否还需要我将 npm 安装到我的实时主机中?
    • VPS 托管现在非常便宜。 AWS lightsail 起价 3.50 美元。
    • @ceejayoz 我已经尝试过了,它可以工作。但是,当我使用从一个外部 js 到另一个外部 js 的函数时,它会返回错误“未定义函数”
    【解决方案3】:

    您可以在您的 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
    

    【讨论】:

    • rand 方法不是一个好主意,除非您使用比 99 高很多的上限。常客会定期看到缓存的内容(可能还有几个不同的缓存版本一次访问),并且不经常访问的访问者会导致更多的带宽使用和较差的性能,因为 CSS 文件会在每次网页浏览时重新加载。
    • @ceejayoz 请问您对此有何建议?我也准备好了这个版本控制,有些人出于不同的原因不推荐它。
    • @LEADIT 查看我的回答。版本控制是人们处理这个问题的主要方式——你会看到几乎每个主要网站(包括 StackOverflow 上的这里)都使用某种版本控制方法。我不知道“一些”是谁,但他们给你的信息不好/过时。
    • @ceejayoz 我很抱歉概括了一些,但我也看到了这种关于堆栈溢出的答案,你对他的答案的评论与那个(他们使用版本控制的方式)非常相似。这就是为什么我正在寻找一种更好的方法,我在你的评论中读过。
    猜你喜欢
    • 2018-06-04
    • 2018-11-01
    • 2020-01-24
    • 2015-05-23
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多