博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Laravel php artisan optimize 源码解读
阅读量:5982 次
发布时间:2019-06-20

本文共 1763 字,大约阅读时间需要 5 分钟。

原文:

在部署 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\ComposerdumpOptimized() 找到:

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\ApplicationgetCachedServicesPath 中:

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

很清晰。

转载地址:http://whrox.baihongyu.com/

你可能感兴趣的文章
Hawk 数据抓取工具 使用说明(二)
查看>>
如何在Eclipse或者Myeclipse中使用tomcat(配置tomcat,发布web项目)?(图文详解)(很实用)...
查看>>
C#图片处理之: 另存为压缩质量可自己控制的JPEG
查看>>
[翻译]C#和COM的互操作
查看>>
PLSQL的 dynamic sql小例子
查看>>
[Spark][python]从 web log 中提取出 UserID 作为key 值,形成新的 RDD
查看>>
通用权限实现的核心设计思想
查看>>
一个自带简易数据集的模拟线性分类器matlab代码——实验训练
查看>>
30 个很棒的 PHP 开源 CMS 内容管理系统
查看>>
HDU ACM 1046 Gridland 找规律
查看>>
面试题36:数组中的逆序对
查看>>
Windows 8.1 新增控件之 TimePicker
查看>>
设计模式之美:Strategy(策略)
查看>>
使用 ALinq 实现 Linq to MySQL【转】
查看>>
C#实现平衡多路查找树(B树)
查看>>
重写Object.equals()方法和Object.hashCode()方法
查看>>
35.3. Node, Edge and Graph Attributes
查看>>
jQuery中jsonp的跨域处理,no access-control-allow-origin,unexpected token
查看>>
10.3. zfs
查看>>
Android刷机备忘录
查看>>