欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > php >内容正文

php

Laravel php artisan optimize 源码解读

发布时间:2025/5/22 php 61 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Laravel php artisan optimize 源码解读 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

原文:https://www.codecasts.com/blo...

在部署 Laravel 项目的时候,我们经常会使用到一个提升性能的命令:

php artisan optimize

本文来看看这个命令执行背后的源码:

首先我们可以使用编辑器搜 OptimizeCommand,应该就可以找到该命令源码的所在:
Illuminate\Foundation\Console\OptimizeCommand,我们关注其中的 fire() 方法:

public function fire(){$this->info('Generating optimized class loader');if ($this->option('psr')) {$this->composer->dumpAutoloads();} else {$this->composer->dumpOptimized();}$this->call('clear-compiled');}

fire() 方法,默认情况下,会执行$this->composer->dumpOptimized(),而这行代码触发的其实就是composer dump-autoload --optimize,源代码可以在Illuminate\Support\Composer 的 dumpOptimized() 找到:

public function dumpOptimized(){$this->dumpAutoloads('--optimize');}

最后,optimize 命令还执行了call('clear-compiled'),其实就是触发php artisan clear-compiled,而很巧的是,我们也是可以直接使用编辑器搜ClearCompiledCommand 来找到源码,位于 Illuminate\Foundation\Console\ClearCompiledCommand 中,这里的 fire() 方法其实关键的一步就是删除了一下 cache 下的文件,我们来看:

public function fire(){$servicesPath = $this->laravel->getCachedServicesPath();if (file_exists($servicesPath)) {@unlink($servicesPath);}$this->info('The compiled services file has been removed.');}

通过确定 $servicesPath 的位置,再使用 @unlink($servicesPath); 删除。

确定 $servicesPath 的代码 $this->laravel->getCachedServicesPath() 位于 Illuminate\Foundation\Application 的 getCachedServicesPath 中:

public function getCachedServicesPath(){return $this->bootstrapPath().'/cache/services.php';}

这样一看,其实就是将 bootstrap/cache/services.php 文件删除,而这个 services.php 是 Laravel 会自动生成的一个数组文件,这里指定了每个 Providers 和 Facades 的位置和命名空间的全路径等,在启动 Laravel 项目的时候,可以直接读取使用。

所以这个命令可以拆为两步:

1.composer dump-autoload --optimize // composer 层面优化加载速度 2.php artisan clear-compiled // 删除 bootstrap/cache/services.php

很清晰。

总结

以上是生活随笔为你收集整理的Laravel php artisan optimize 源码解读的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。