加速你的框架运行, 教你如何减少服务提供者的启动.

Laravel有一个很强大的功能,就是服务提供者,它使得开发者能很容易的便能调用各种服务,但这也使得框架变得臃肿,今天就教大家如何优化各种不必要的服务提供者.

  • 找到不需要启动的服务提供者.
    执行php artisan package:discover或者composer dump-auto查看我们引导了什么服务提供者.
  • 从这里可以看到我们所有自动启动的外部服务提供者,我们可以优化其中一些,
        比如encore/laravel-admin是一个后台,但实际上我们每一次请求都会启动这个,所以我们只需要判断url中出现admin才启动这个服务
       
    比如intervention/image实际上是一个图片处理包,我们也不需要每一次请求都启动它,只需要压缩,操作图片时才启动这个包,这时候就可以写一个Service类,在类的构造方式启动这个服务
  • 首先我们想要排除某个服务提供者,把它加入项目根目录下composer.json文件中的extra.laravel.dont-discover的数组中即可
  • 如果我们不启动这些服务,但又使用的话,这时候就会出现不可意料的结果
  • 所以,这时候我们就需要按需启动服务提供者.比如只有在url包含有admin才启动encore/laravel-admin
  • 首先我们先查看这个包的根目录下的composer.json文件
  • 这里它注册了服务提供者和门面,所以我们只需要手动注册这两个即可
  • 这里我选择在\App\Providers\AppServiceProvider::boot引导这些服务
  • 如果服务出现依赖情况的话,那么我们必须现在\App\Providers\AppServiceProvider::register执行XXXServiceProvider::register方法,然后再去\App\Providers\AppServiceProvider::boot执行服务提供者的XXXServiceProvider::boot方法.
  • 因为这里我没有看到有依赖的痕迹,所以直接一次性注册启动服务
  • 可以手动调用XXXServiceProvider::register然后再调用XXXServiceProvider::boot方法.
  • 这里框架内部有一个方便的方法\Illuminate\Contracts\Foundation\Application::register
  • 它会帮我们注册,然后再启动,不需要我们做额外的判断(因为有些服务提供者没有register方法)
  • 手动启动的代码如下

    然后我们就可以随心所欲的操控外部的服务提供者了.

本作品采用《CC 协议》,转载必须注明作者和本文链接
当神不再是我们的信仰,那么信仰自己吧,努力让自己变好,不辜负自己的信仰!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!