主题
- Laravel基础介绍
- 从Laravel的生命周期看项目架构
- Laravel性能优化方法
- Laravel独特开发模式介绍
- Laravel关键组件的价值, 使用与修改
- Laravel C层到M层的分层
- Laravel的分布式架构?
- 深入Laravel组件设计
- Laravel常用php特性
概述
Laravel基础介绍
从Laravel的生命周期看项目架构
四种生命周期
- Http : http请求
- Artisan : 命令脚本
- Queue work :队列
- Schedule : 计划任务
http 生命周期
public/index.php 与入口
- 适合载入define
autoload
- composer机制
- compile
bootstrap层
Application容器自定义
- 系统path
- 事件机制
- 默认组件
ExceptionHandler与异常体系
- report 建立监控体系
- render 建立响应格式
- 建立面向异常机制
注册ConsoleKernel与HttpKernel
- kernel 可替换
make Kernel
- 注册路由middleware, 路由要调的在这里
Request::capture() 生成Request
request的功能
- PSR-7
- request信息(ip, url, post, get , query 等等)
- header操作(版本号, accept, version等等)
- file操作
- method( restful method )
- cookie
- session
- route
- user
Request 的常见替换方法
- 从入口替换. index.php
- 在中间件中替换, 克隆属性, 绑定容器
$kernel->handle()
- 全局try catch.
注册request
- 可替换request
bootstrap!! ( 在HttpKernel中注册 , 全部可替换)
- load env , 可重构Env加载机制
- load config, 读取缓存, 可修改配置文件体系(缓存).
- 自定义日志体系 ( 否则用系统的日志 )
- 在php中注册异常与错误处理机制
- 基于配置文件注册facade 别名 ( 其实可以不用 )
从配置中读取provider, 并全部加载
- 自动生成service的映射表, 从而实现部分组件懒加载
遍历注册所有app.php 中注册的provider
- 事件注册
- Auth注册
- 路由注册 ( 这里可以修改路由文件 )
其它常见
- sql日志
- 日志体系
- 自定义包的调入
- 执行provider 的boot 方法
运行全局中间件
- session 在这里替换
- cookie 在此处定义了逻辑
- csrf token
Router
routes match(基于restful规则, 可以考虑替换)
- method 验证
- https
- host 验证
- uri
route dispatch
- 路由中间件
- 控制器解析
prepareResponse
- 对控制器返回的结果进行Response封装
response的功能
- 响应request的要求
- 构建header
- 构建cookie
- 格式化( json , 文本 )
$response->send()
- 输出header
- 输出content
- 接口结束逻辑(fast cgi)
$kernel->terminate()
- 遍历中间件后置方法
- 结束Application
Laravel 性能优化方法
Laravel性能问题表现
- QPS 低
- CPU 开销大
严重程度?
- 优化后是lumen裸跑的 1/4
- 带业务跑性能差距会降低
Laravel的性能缺点原因
- composer类库大
- 文件IO多
- dotenv
- 类, 方法等
- 新特性多( 大量闭包, 继承, trait, 后期静态绑定, 异常体系 )
- 依赖注入 ( 反射类 )
性能优化思路
- 减少IO
- 减少CPU开销
牺牲性能换取的优势
- 大量方便开发的工具
- 组件化( 面向对象, 面向接口 分拆 )
- 高度可配置 ( 系统通过复杂的manager 实现按自定义配置, 变更数据库,缓存等组件)
- 约定自动识别
系统级提升办法
- php 7
- php opcache
- env 写入php.ini
Laravel自带提升办法
- composer dump autoload –production
- 生成compile缓存文件
- Route cache
- Config cache
底层代码重构的提升办法
- 减少需要配置, 构建的组件 (例如约定DB只用mysql)
- 手写约定, 减少自动识别
- 减少组件化程度 (例如去掉 Route 等)
架构层提升办法
- 使用lumen做高性能功能
- Laravel + lumen 搭建分布式架构
- 使用Illuminate组件而非Laravel自身
Laravel 独特开发模式介绍
- composer 包
- 异常体系
- 事件机制
- 路由机制以及Restful规范
- 中间件
- 基于Eloquent的M层设计思路
- 基于队列的异步机制
- 计划任务
- artisan脚本命令
Laravel关键组件的价值, 使用与修改
support
- collection
- pipeline(特别好用)
- session
- storage
- 消息系统
- cache
- auth
- policy
- elixir
- envoy
- blade
- Resource/Assets
- migration
- factory
- tests ( TDD )
- dusk( BDD )
其它类库
- dotenv
- monolog
- fzaninotto/faker
- guzzle
- predis
- league/fractal
- 其它symfony组件
Laravel C层到M层的分层思路
横向分层 ?
A方案
Http
- Controllers
- Middleware
- Models
- Repositories
- Events
- Listeners
- Exceptions
- Jobs
B方案
Modules
ModuleName
- Models/
- Repositories/
- Events/
- Listeners/
- Exceptions/
- Jobs/
- Services
- Provider
- Libraries
纵向分层
entry
controller action
- request
- middleware
- queue work
- artisan
- schedule
service
- service
- php api
- http api
- socket api
components
- Repository
- package
- event
- job
Model
- Eloquent ORM
- Storage
- Cache
基础设施
- mysql
- redis
- message queue
- cloud storage
深入Laravel组件设计
- IoC 容器
- Pipeline
- Manager ( config + Driver + adapter )
- Eloquent ( Model Builder Relations )
- Event
- Command
Laravel常用php特性
- static
- Trait
- Closure
- Exception + Throwable
- SPL ( Array, Iterator… )
- yield
- Type hint
- Reflection