laravel 內容理解和摘要

主題

  • Laravel基礎介紹
  • 從Laravel的生命週期看項目架構
  • Laravel性能優化方法
  • Laravel獨特開發模式介紹
  • Laravel關鍵組件的價值, 使用與修改
  • Laravel C層到M層的分層
  • Laravel的分佈式架構?
  • 深刻Laravel組件設計
  • Laravel經常使用php特性

概述

Laravel基礎介紹

Laravel基礎介紹php

從Laravel的生命週期看項目架構

四種生命週期

  • Http : http請求
  • Artisan : 命令腳本
  • Queue work :隊列
  • Schedule : 計劃任務

http 生命週期

  • public/index.php 與入口mysql

    • 適合載入define
    • autoloadlaravel

      • composer機制
      • compile
    • bootstrap層redis

      • Application容器自定義sql

        • 系統path
        • 事件機制
        • 默認組件
      • ExceptionHandler與異常體系數據庫

        • report 創建監控體系
        • render 創建響應格式
        • 創建面向異常機制
      • 註冊ConsoleKernel與HttpKerneljson

        • kernel 可替換
    • make Kernelbootstrap

      • 註冊路由middleware, 路由要調的在這裏
    • Request::capture() 生成Requestapi

      • 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
相關文章
相關標籤/搜索