支持Laravel.io的持续发展 →

为什么Laravel使用缓存以及如何清理它们进行调试

10 Sep, 2022 2 min read

在规模扩大的情况下,性能问题可能来源于对 Laravel 启动过程中值重复计算的次数,这个阶段发生在你的访客每次做出请求时(除非你使用 Octane)。因此,缓存这些值对于保持你的应用程序快速运行至关重要。但是,有时问题会发生,缓存会妨碍调试。让我们看看如何清除 Laravel 使用的所有缓存。

本文最初发布在 Benjamin Crozat 的博客上。

在 Laravel 中为什么和如何清除配置缓存

一些配置值是从你的环境文件中获取的,这可能会略微减慢速度。幸运的是,Laravel 可以将它们缓存起来,帮助我们加速应用程序。

php artisan config:clear

在 Laravel 中为什么和如何清除事件缓存

Laravel 的自动事件发现是有益的。你不需要手动注册监听器了,这是通过你在 EventServiceProvider 中做的微小改变实现的。

…

class EventServiceProvider extends ServiceProvider
{
    …

    public function shouldDiscoverEvents() : bool
    {
        return true;
    }
}

在生产环境中,你可以缓存自动发现的事件,以获得最佳性能。

php artisan event:clear

在 Laravel 中为什么和如何清除路由缓存

路由是您Web应用程序或API不可或缺的一部分。如果路由非常多,解析路由将花费很多时间,正如您所猜测的,缓存可以帮助解决这个问题。

php artisan route:clear

为什么以及在Laravel中如何清除计划任务缓存

假设您有一个需要很长时间才能完成的定期任务,它将与下一次出现的时间重叠。您可以防止它在上一个任务完成之前执行

$schedule->command('some:task')->withoutOverlapping();

在幕后,Laravel使用应用程序缓存来记住哪些任务尚未完成运行。

php artisan schedule:clear-cache

为什么以及在Laravel中如何清除视图缓存

Blade指令甚至在本地的开发环境中也会被编译和缓存。有时,编译的视图可能无法与代码的最近更改保持一致。同样,您有一个命令来处理这种情况

php artisan view:clear

如何在Laravel中清除所有缓存

最后,让我们看看最终的缓存清除命令。

php artisan optimize:clear

此命令将删除以下缓存

  • 配置
  • 编译的类缓存
  • 事件
  • 通用缓存
  • 路由
  • 视图

如何知道?很简单。我在代码编辑器中使用“转到文件”命令搜索了“OptimizeClearCommand.php”文件。如你所见,其源代码很容易理解

…

class OptimizeClearCommand extends Command
{
    …

    public function handle()
    {
        $this->components->info('Clearing cached bootstrap files.');

        collect([
            'events' => fn () => $this->callSilent('event:clear') == 0,
            'views' => fn () => $this->callSilent('view:clear') == 0,
            'cache' => fn () => $this->callSilent('cache:clear') == 0,
            'route' => fn () => $this->callSilent('route:clear') == 0,
            'config' => fn () => $this->callSilent('config:clear') == 0,
            'compiled' => fn () => $this->callSilent('clear-compiled') == 0,
        ])->each(fn ($task, $description) => $this->components->task($description, $task));

        $this->newLine();
    }
}
上次更新时间:一年前。

benjamincrozat 喜欢了这篇文章

1
喜欢这篇文章?让作者知道,并给他们一个赞!
benjamincrozat (Benjamin Crozat) 全栈Laravel开发者,热衷于TALL栈。对SEO着迷。对UI和UX设计有很高的胃口。

你可能还喜欢以下文章

March 11th 2024

如何使用Larastan将您的Laravel应用程序从0提升到9

在应用程序执行之前发现Laravel应用程序中的错误是可能的,这要归功于Larastan,它...

阅读文章
July 19th 2024

在不使用特性的情况下标准化API响应

我注意到大多数用于API响应的库都是使用特性实现的,并且...

阅读文章
2024年7月17日

在您Laravel项目中通过Discord通知收集反馈

如何在Laravel项目中创建反馈模块并在收到消息时收到Discord通知...

阅读文章

我们感谢这些 惊人的公司 为我们提供支持

您的标志在这里?

Laravel.io

解决问题、知识共享和社区建设的Laravel门户。

© 2024 Laravel.io - 版权所有。