Laravel 效能檢核清單 « 關於網路那些事...
[入門設定]
Route Caching
將 routes cache 可以讓server 更有效率的執行 request
config caching
如同 routes cache,將.env設定內容進行快取,將可以提昇讀取效率
若有修改 .env ,則建議先執行 clear 再執行 cache
優化 composer autoloader
雖然composer 執行 autoload 效率不錯,但是因為有使用 PSR-4 規則,則會減緩速度
因此,可以透過dump-autoload 產生優化 autoload file
放心的使用 Blade
不必擔心 view 若過度的使用 blade 將會拖慢 compiles 速度,導致效能下降
和其他模板引擎不一樣的是,Laravel 的 template engines 會將 blade 進行編譯並且進行快取,直到下一次修改 blade 才會再被重新編譯,這意味著 blade 不會對你的系統造成負擔,可以放心的使用它。
[中級設定]
Cache/Session Driver
在 laravel 預設存取 session 以及 cache 的driver設定是 "file"
建議改用 redis (需安裝 predis)
盡快更新 Laravel 至最新版
通常新版本的 laravel 都會修正一些影響效能的 issue
刪除那些用不到的服務
請詢問自己,真的需要那些東西嗎?
檢視你的 config/app.php 檢視是否有哪些 service provicer 是你用不到的
請嘗試依他移除,並且測試應用程式是否能正常運作
Eager Loading
Eager Loading 能夠提升 Eloquent 效率
常見的 N+1 query 問題,例如,在查詢 1000 本書,要取得所有作者名稱時
如果用以下方式,將會產生 1001 次 query
用以下方式,則可以避免效能的問題
實際執行,只會用到 2 個 query
Cache Query 結果
有時,將 Query 結果進行 Cache 會是不錯的做法
例如,需要取得前 10 名的相簿,若每天擁有 24000 次的 request 次數
可以用這樣的方式,將查詢結果進行快取,快取時間設定在 60 分鐘,就能以 24 次 query 滿足這一天 24000 次的 request 訪問
Tables 加入索引 (index)
在製作 migration時,增加索引,將可以增進你查詢的效率
避免過度使用 Middleware
Laravel 每次在執行時,都會呼叫已註冊的 middleware
所以,請檢查目前的 middleware是不是必須的,
如果要檢查 middleware ,可以透過 Kernel.php 檔案來查閱
使用 Queues 的時機
有時,Laravel 在執行某些事件,會需要耗掉一些時間
這時可以透過非同步任務的方式來處理,例如傳送 email ,來提升使用者的體驗
[進階設定]
使用 pusher 來做非同步任務處理
想像一下,現在你如果要執行一個非常大量的處理程式,例如,同時傳送大量的簡訊
這時就能簡易的透過非同步的 job 來排設 queue
以及結合 pusher 來傳送訊息
善用 Logs / Debugbars / Laravel Telescope
在調測效能或者測試過程,可以透過 Logs / Debugbars / Laravel Telescope 來監看
例如,檢測資料庫查詢的時間是否過慢,確認 query 請求次數,
特別一提的是,可善用 laravel application - Laravel Telescope ,這是一套優雅的debug 助理工具
You can’t improve it if you can’t measure it.
更新 php 版本
7.* 絕對是必要
考慮使用 Lumen 建構服務
如果應用程式有大幅度的增長,考慮開始將服務進行分離時,可以考慮使用 lumen 來開發
CDN
若系統服務大到一個規模,則推薦使用CDN 服務
底下是一些知名的 CDN 服務商,供參考:
Akamai
Max CDN;
Cloudflare;
Amazon AWS Services (S3 + CloudFront);
使用進階的量測工具
前面所提到的 Laravel Debugbar or Telescope 都是不錯的開始
但其實還有一些進階的量測工具,例如:
New Relic;
AppOptics;
Datadog;
Sentry;
Vertical 規模
前面,雖然已經優化了程式碼,但是當網站規模不斷擴大,適當的增加RAM, 儲存空間, 頻寬, CPU 都可即刻解決一些問題
即單位主機所需的基本規模,還是要配得恰當才行,並且是不同時間點調整方案
Horizontal 規模
有別於傳統的 Vertical 規模設定,Horizontal 規模注重的是分散式的管理流量及風險
以多臺主機方式,做 load balancer 來將效能提升到更好的層次
但是,很少的程式碼會在一開始就考量到水平規模,因此,在實際做 load balancer時,會遇到需要適當裁切你的 code ,或製作成多個微服務,來因應主機策略
如果你喜歡我們的文章內容,請在這裡按個讚
Tweet