在部署 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設計模式之工廠模式定義與用法詳解