會選擇 Codeigniter 有一個很大的需求是因為要能快速入手,簡單好用,從 3.x 個位數版本開始,現在推出 4 大改版,結構和其他框架也越來越像。
最近修改一份無框架的專案程式碼,在不更改業務邏輯、資料庫結構的狀況下,移植到 ci4 上面以後才發現,速度變的奇慢無比。想到要追蹤 ci4 的執行速度,才發現 composer 下來的 core 還挺複雜的阿! 功能強大結果變慢,屠龍的少年,終將變成惡龍呀……。
於是開始研究 Ci4 優化的方法,這邊記錄下來。
在優化之前,以兩個檔案讀取作為指標。
讀取名叫 init 的頁面 2.3 sec
Ajax 讀取前端設定 JSON 資料 3.41 sec
處理的動作
- 在 app/Config/Modules.php 中,把 $enabled 和 $discoverInComposer 設定為 false ,參考文件。( init 頁面 828ms, ajax load settings json 2.11 sec)
- 同一個檔案中,把 $aliases 設定為空集合。( init 頁面 761.82ms, ajax load settings json 1.8 sec)
- 在 app/Config/Toolbar.php 中,把 $collectors 設定為空集合。在 app/Config/Events.php 中,有一段標記 ‵Debug Toolbar Listeners.‵ 的程式碼,刪除或註解起來。 ( init 頁面 640.70ms, ajax load settings json 1.54 sec)
- 在 app/Config/Filters.php 中,預設有幾個 class 開啟,分別是:csrf、toolbar、honeypot、invalidchars、secureheaders。這幾個有些是安全設定,自行確認檢查哪些要移除。
- 檢查 app/Config/Autoload.php 裡面有哪些用不到的,儘量在只需要使用時才用。
效果顯著。
init 頁面從 2.3 秒到 683豪秒
AJAX 讀取前端設定從 3.41 秒到 1.65 秒
但是無框架的原始程式碼呼叫速度還是非常的快的。在相同資料庫、相同 php 運行環境的狀況下,速度是框架 3 倍以上。
init 頁面 208.03 豪秒
AJAX 讀取前端設定 354.94 豪秒
這沒辦法比,革命尚未成功就是。