減少服務提供者的啟動加速你服務的效能 2.0

seth-shi發表於2021-05-25

效能一直是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服務,密碼重置服務等等

當然要講的重點還是和APIAdmin混合的專案, 使用了一個全棧的框架,相信也有很多專案使用了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伺服器的圖

減少服務提供者的啟動加速你服務的效能 2.0

可以看到, 優化之後的效果很好.

Links

www.shiguopeng.cn/archives/374
www.shiguopeng.cn/archives/507

本作品採用《CC 協議》,轉載必須註明作者和本文連結
當神不再是我們的信仰,那麼信仰自己吧,努力讓自己變好,不辜負自己的信仰!

相關文章