在部署 Laravel 项目的时候,我们经常会使用到一个提升性能的命令:
php artisan optimize
本文来看看这个命令执行背后的源码:
首先我们可以使用编辑器搜 OptimizeCommand,应该就可以找到该命令源码的所在:
Illuminate\Foundation\Console\OptimizeCommand,
我们关注其中的 fire() 方法:
~~~
public function fire() {
$this->info('Generating optimizedclass 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 artisanclear-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 beenremoved.');
}
~~~
通过确定 $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`
很清晰。
- PHP发表心情投票功能示例(附源码)
- TP5验证码实现
- 谈谈JSONAPI在PHP中的应用
- Laravel artisan optimize 源码解读
- PHP中的闭包和匿名函数
- 65条最常用正则表达式,你要的都在这里了
- PHP 断点续传实例详解
- 从配置文件的角度去了解Yii2
- 高效的PHP邮件发送库:Swiftmailer
- 对于php-fpm和cgi,还有并发响应的理解
- 详解 Cookie 纪要
- Cookie详解
- Cookie格式
- Cookie的创建
- Cookie 基础知识*
- Cookie的使用
- Cookie的基本操作
- Cookie的域概念
- Session详解
- session与cookie的区别
- Cookie与Session问答
- php如何解决中文乱码问题?
- 微信小程序 PHP生成带参数二维码
- PHP实现QQ快速登录
- mysql 队列 实现并发读
- php+redis消息队列实现抢购功能
- js购物车实现思路及代码(个人感觉不错)
- PHP curl 抓取AJAX异步内容示例
- PHP curl 并发最佳实践代码分享
- php 字符串中是否包含指定字符串的多种方法
- PHP7如何开启Opcode打造强悍性能详解
- PHP实现用户登录的案例代码
- yii2多图上传组件的使用教程
- PHP数组去重的更快实现方式分析
- 购物车实现的几种方式优缺点对比
- laravel项目利用twemproxy部署redis集群的完整步骤
- PHP+memcache实现消息队列案例分享
- PHP CURL CURLOPT参数说明
- php实现可以设置中奖概率的抽奖程序代码分享
- 基于在生产环境中使用php性能测试工具xhprof的详解
- 一个PHP并发访问实例代码
- php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
- PHP设计模式之工厂模式定义与用法详解