当前位置: 首页 > 后端技术 > PHP

Laravelphpartisanoptimize源码解读

时间:2023-03-29 22:25:32 PHP

原文:https://www.codecasts.com/blo...在部署Laravel项目时,我们经常会使用一个命令来提升性能:phpartisanoptimize这篇文章看看吧这个命令执行背后的源码:首先我们可以用编辑器搜索OptimizeCommand,应该可以找到命令的源码:Illuminate\Foundation\Console\OptimizeCommand,我们注意fire()方法:publicfunctionfire(){$this->info('生成优化的类加载器');如果($this->option('psr')){$this->composer->dumpAutoloads();}else{$this->composer->dumpOptimized();}$this->call('clear-compiled');}fire()方法,默认会执行$this->composer->dumpOptimized(),这行代码会触发composerdump-autoload--optimize,源码可以在Illuminate\Support\Composer的dumpOptimized():publicfunctiondumpOptimized(){$this->dumpAutoloads('--optimize');}最后optimize命令也执行了call('clear-compiled'),实际上触发了phpartisanclear-compiled,巧的是我们也可以直接用编辑器搜索ClearCompiledCommand找到源码,位于Illuminate\Foundation\控制台\ClearCom在piledCommand中,这里fire()方法的关键步骤是删除缓存下的文件。让我们看看:publicfunctionfire(){$servicesPath=$this->laravel->getCachedServicesPath();如果(文件存在($servicesPath)){@unlink($servicesPath);}$this->info('已编译的服务文件已被删除。');}通过确定$servicesPath的位置,使用@unlink($servicesPath);删除OK$servicesPath$this->laravel->getCachedServicesPath()的代码位于Illuminate\Foundation\Application的getCachedServicesPath中:publicfunctiongetCachedServicesPath(){return$this->bootstrapPath().'/cache/services.PHP';}像这样乍一看其实就是删除bootstrap/cache/services.php文件,而这个services.php是Laravel自动生成的数组文件。这里指定了每个Provider和Facade的位置以及命名空间的完整路径。在启动Laravel项目时,可以直接读取和使用。所以这个命令可以拆分成两步:1.composerdump-autoload--optimize//在composerlevel优化加载速度2.phpartisanclear-compiled//deletebootstrap/cache/services.php就很清楚了。