2021年12月18日

PHP 執行效能測試,比較 PHP 8.1、8.0、7.4 實測結果,Laravel 8 速度提升了 15%

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.7196.8247.2217.8119.071

PHP 8.0

次數#1#2#3#4#5
執行時間 (秒)5.2935.7755.7836.4126.530

PHP 8.1

次數#1#2#3#4#5
執行時間 (秒)4.424.6185.2865.6266.157

接著我會過濾掉各版本中,花費最少與最多時間的樣本,只取中間三組資料做平均值,結果如下:

PHP 版本平均執行時間 (秒)速度提升
7.47.2850%
8.05.99021.62% (相較於 7.4)
8.15.17715.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 ,所以穩定性跟效能可能沒有那麼高,如果有追求更仔細結果的人,可以使用更專業的設備測試。

以上,供大家參考~