关于php:减少服务提供者的启动加速你服务的性能-20

性能始终是Laravel的最大话题之一, 但它也的确为很多PHP开发者提供了很多不一样的常识, 这里再次为框架减速一次.

根底 (陈词滥调)

  • 缓存,会话,队列都是用Redis驱动
  • 框架内置的缓存

    • 路由缓存php artisan route:cache
    • 配置缓存php artisan config:cache
  • 依据接口幂等性应用缓存

降级

  • OPcache

    • 没什么非凡理由间接上这个
    • 并把opcache.validate_timestamps设置为0,让你生产环境的PHP代码永远不自动更新, 相似于其它编译型语言,每次部署代码,须要重启php-fpm来加载新代码
    • 更多可参考这篇文章https://gywbd.github.io/posts/2016/1/best-config-for-zend-opcache.html

    缩小不必要的中间件

  • 比方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服务器的图

    能够看到, 优化之后的成果很好.

Links

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理