博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
laravel 内容理解和摘要
阅读量:5968 次
发布时间:2019-06-19

本文共 3050 字,大约阅读时间需要 10 分钟。

主题

  • 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

转载地址:http://latax.baihongyu.com/

你可能感兴趣的文章
linux文件描述符导致squid拒绝服务
查看>>
[APEC中小企业峰会2009上]成功企业 = 理想主义 + 现实主义
查看>>
[转]经典正则表达式
查看>>
基于ARM的嵌入式Linux移植真实体验(3)――操作系统
查看>>
JDBC+Servlet+JSP整合开发之26.JSP内建对象
查看>>
【下载】深入oracle数据库专用虚拟机环境部署方案《VirtualBox+OELR5U7x86_64+Oracle11gR2》...
查看>>
[Web开发] IE8 网页开发参考文档
查看>>
企业架构 - 涉众管理(Stakeholder Management)
查看>>
关于SQLServer2005的学习笔记——生日问题
查看>>
值得推荐的C/C++开源框架和库
查看>>
I/O复用机制概述
查看>>
Android提升篇系列:Activity recreate(Activity 重新创建/自我恢复)机制(一)
查看>>
创建索引时,键列位置的重要性
查看>>
项目开发周期与数据库设计对比
查看>>
Python 图形 GUI 库 pyqtgraph
查看>>
OEA中的缓存模块设计
查看>>
flask使用sqlit3的两种方式
查看>>
mount/umount命令【转】
查看>>
全新的PDO数据库操作类(仅适用Mysql)
查看>>
物以类聚:对象也有生命
查看>>