效能一直是Laravel
的最大話題之一, 但它也確實為很多PHP
開發者提供了很多不一樣的知識, 這裡再次為框架加速一次.
基礎 (老生常談)
快取,會話,佇列都是用
Redis
驅動框架內建的快取
- 路由快取
php artisan route:cache
- 配置快取
php artisan config:cache
- 路由快取
根據介面冪等性使用快取
升級
OPcache
- 沒什麼特殊理由直接上這個
- 並把
opcache.validate_timestamps
設定為0
,讓你生產環境的PHP
程式碼永遠不自動更新, 類似於其它編譯型語言,每次部署程式碼,需要重啟php-fpm
來載入新程式碼 - 更多可參考這篇文章gywbd.github.io/posts/2016/1/best-...
減少不必要的中介軟體
- 比如
Laravel
現在已經內建了跨域中介軟體, 如果只是為APP
提供介面,完全就沒有跨域的問題, 可以直接註釋這個中介軟體 - 比如內建的
API
限制速率的介面, 可能對很多專案場景就不合適
減少服務提供者
- 比如介面就不需要檢視服務,
Session
服務,密碼重置服務等等
當然要講的重點還是和API
和Admin
混合的專案, 使用了一個全棧的框架,相信也有很多專案使用了Laravel-admin
或者是Dcat Admin
之前我也寫過一篇文章講過如何減少你的服務提供者, 因為自從Laravel5.5
之後,需要第三方包都可以自己註冊,然後Laravel
自動發現這些服務提供者
可以執行這條命令找出你已經註冊的服務提供者:
php artisan package:discover
Discovered Package: dcat/laravel-admin
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: fruitcake/laravel-cors
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
- 這裡可以很明顯看到了
dcat/laravel-admin
, 我們只需要去專案根目錄下的composer.json
寫入以下配置
"extra": {
"laravel": {
"dont-discover": [
"dcat/laravel-admin"
]
}
}
- 當你這樣子做了之後, 再執行
php artisan package:discover
就會發現dcat/laravel-admin
消失了 - 不過這也代表我們無法使用
Admin
了, 所以我們也需要增加一個條件來手動註冊服務提供者 - 我們可以在
AppServiceProvider.php
增加以下程式碼
<?php
namespace App\Providers;
use Dcat\Admin\Admin;
use Dcat\Admin\AdminServiceProvider;
use Illuminate\Foundation\AliasLoader;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
// 這個條件有很多種方式, 你甚至可以通過 url 來判斷
if (config('admin.enable')) {
AliasLoader::getInstance()->alias('Admin', Admin::class);
$this->app->register(AdminServiceProvider::class);
}
}
}
- 修改完畢之後, 發現效能有了
40%
的提升(因為Admin
註冊了很多路由, 啟動很多東西)
機器:2U4G 的機器 CentOS Linux release 8.3.2011
環境: (使用Laradock
全家桶, 開啟OPcache
)
PHP_VERSION=7.4
PHP_FPM_INSTALL_OPCACHE=true
- 最後找運維要了其中一臺
API
伺服器的圖
可以看到, 優化之後的效果很好.
Links
www.shiguopeng.cn/archives/374
www.shiguopeng.cn/archives/507
本作品採用《CC 協議》,轉載必須註明作者和本文連結