2021 年 11 月底, PHP 8.1 釋出了。每次釋出新版本時,官方總是不外乎地會宣稱新版本的執行速度提升了。可是到底是不是真的有提升?就算有提升,是提升多少呢?實際上有感嗎?可能要實測才知道。
於是我這次就想要來親身體驗看看,實際測試看一下效能提升了多少。
本次會利用 Laravel 8.x 範例應用來做測試,測試的工具為 ApacheBench。
前置準備
下載 Laravel
很幸運的,Laravel 社群的蓬勃發展,讓我可以很輕鬆的實現這項測試。
根據官網說明,首先透過 curl 下載 example-app
:
curl -s https://laravel.build/example-app | bash
接著啟用 Sail:
cd example-app
./vendor/bin/sail up
然後透過瀏覽器打開 http://localhost/
,Laravel 的範例應用就成功起來了。我測試的當下 Laravel 的版本是 v8.76.2。
如何切換 PHP 版本
因為我要測試不同版本的 PHP,因此我需要修改 Sail ,打開根目錄下的 docker-compse.yml
,可以在 laravel.test 的區塊看到這幾行:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.1
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.1/app
我會分別把 context: ./vendor/laravel/sail/runtimes/8.1
中的 8.1 改為 8.0、7.4,以及 image: sail-8.1/app
中的 8.1 改為 8.0 及 7.4。
我有踩到 composer 套件相依的問題,如果有遇到,可以手動刪掉 composer.lock 及 vendor 目錄,並手動用 PHP 7.4 重新安裝相依
開始測試
測試指令:
ab -c 1 -n 500 http://localhost/
我使用 ApacheBench ab
來進行測試,每次都使用一個連線,來執行 500 個 Request。
每個版本會執行五次測試,執行測試完五次後,會透過修改 docker-compse.yml
並重啟容器的方式來切換 PHP 版本。
而我這次主要看的指標是 Time taken for tests
,也就是執行測試所需時間。
測試結果
我將執行版本的結果,依照所花費時間由少到多排序:
PHP 7.4
次數 | #1 | #2 | #3 | #4 | #5 |
---|---|---|---|---|---|
執行時間 (秒) | 6.719 | 6.824 | 7.221 | 7.811 | 9.071 |
PHP 8.0
次數 | #1 | #2 | #3 | #4 | #5 |
---|---|---|---|---|---|
執行時間 (秒) | 5.293 | 5.775 | 5.783 | 6.412 | 6.530 |
PHP 8.1
次數 | #1 | #2 | #3 | #4 | #5 |
---|---|---|---|---|---|
執行時間 (秒) | 4.42 | 4.618 | 5.286 | 5.626 | 6.157 |
接著我會過濾掉各版本中,花費最少與最多時間的樣本,只取中間三組資料做平均值,結果如下:
PHP 版本 | 平均執行時間 (秒) | 速度提升 |
---|---|---|
7.4 | 7.285 | 0% |
8.0 | 5.990 | 21.62% (相較於 7.4) |
8.1 | 5.177 | 15.71% (相較於 8.0) |
可以看到 8.1 相較於 8.0,執行速度快了 15%。而從 8.0 也比 7.4 快了 21%。
結論
在 PHP 的官方網站明確的寫出:23.0% Symfony Demo speedup,而在我這次的測試中,雖然執行的是不同測試,但也沒有相去太遠,所以 PHP 官方應該是可以相信的(吧)。
另外這次也順便執行了 7.4 跟 8.0 比較,看起來也是有顯著的提升效能,所以還在用 7.x 版本的專案,如果有效能的考量,也許可以考慮升級。
最後補充說明,本次執行測驗的設備不是專業伺服器,是透過我平常在家裡上網用的 Windows 筆電搭載 WSL2 ,所以穩定性跟效能可能沒有那麼高,如果有追求更仔細結果的人,可以使用更專業的設備測試。
以上,供大家參考~