Post view

PHP 7.4.5 for Windows V.S. PHP 7.4.5 for Mac效能測試,物件導向程式比Mac版慢2.6倍!

雖然現在的電腦使用者,幾乎沒有多少人會想要架設網站伺服器。通常大學生為了學習PHP程式設計,會需要架設學習測試的練習網站。不過,如果想要使用PHP來架設網站的話,最好的選擇通常都是Linux系統,其次是Windows 10,最差的選擇當然是蘋果的Mac電腦。

考量的主因當然並不只是因為Linux系統免費(也有許多需要付費的Linux系統)而是因為Linux系統的開放原始碼資源非常豐富(開放原始碼不等於免費,有很多原始碼必須使用者付費或是只能用在私人用途),而且Linux的系統精巧,執行效率通常比佔用資源龐大的Windows 10要好非常多。

不過,對我來說,我的優先順序則是完全相反!因為我非不得已,幾乎不使用命令列指令,所以對我來說,最好的選擇是macOS電腦,其次是Windows,最差的則是視窗介面最差的Linux。因此這次的評比就略過Linux不做。如果對Linux有興趣的人,也可以在同一台電腦上同時安裝Windows 10與Linux,以及相同版本的PHP與MySQL來測試看看。

我使用的Mac電腦是16英吋的全新MacBook Pro (16-inch, 2019):

  • 2.4 GHz 8核心Intel Core i9
  • 記憶體64 GB 2667 MHz DDR4
  • AMD Radeon Pro 5500M 8 GB與Intel UHD Graphics 630 1536 MB

搭配的內建顯示器是3072 x 1920解析度的16英吋螢幕。

我使用Boot Camp分割了100GB的NTFS分割區,並安裝好Windows 10 Pro系統。你可以直接從PHP社群網站下載目前最新的PHP 7.4.5版:

https://www.php.net/downloads.php

從phpinfo.php可以看到PHP 7.4.5發表的時間是Apr 14 2020。使用的編譯器是Visual C++ 2017。微軟目前最新的版本是Visual C++2019,我不知道為什麼PHP的研發團隊還在用3年前的版本?

我當然有開啟PHP 7.4.5內建的Zend OPcache快取模組。

這是我寫的insoler Benchmark效能測試程式,這是執行的結果。

insoler Benchmark 效能測試程式
版本 1.0
時間 2020年04月26日 18:44:23
PHP 版本 7.4.5
Web Server 網站系統 Windows 10 Pro
PHP Benchmark 效能測試  
數學運算函示 2.497 秒
字串處理函示 14.989 秒
非物件導向程式,普通 PHP 副程式 6.071 秒
物件導向程式 6.104 秒
PHP 效能測試時間小計 29.661 秒
效能測試時間總計 29.661 秒

我其實是使用XAMPP v3.2.4來幫我安裝目前最新版本的PHP、Apache、MySQL。

因為XAMPP v3.2.4只會幫你啟動預設的MySQL。如果沒有匯入insoler社群網站的資料庫,就無法進行MySQL的效能測試,因此上面的測試只能測試PHP 7.4.5部分的性能表現。

我打開XAMPP內建的phpMyAdmin,這是目前的最新版本phpMyAdmin 5.0.2,你可以看到XAMPP內建的並不是標準的MySQL而是另外一個MariaDB 10.4.11:

MariaDB其實是原本MySQL社群的研發團隊。當Oracle決定收購MySQL的時候,MySQL創辦人號召用戶抵制Oracle失敗,就重新建立新的MariaDB團隊。因此MariaDB與MySQL的功能與相容性非常高。

我使用phpMyAdmin的匯入資料庫功能,來匯入insoler.sql。

想不到因為資料格式錯誤,導致根本無法匯入insoler.sql資料庫!

由於MariaDB的社群團隊原本就是MySQL,所以只好下載MySQL Workbench來試看看。不過,最新的MySQL Workbench 8.0.20、8.0.19竟然無法安裝在Windows 10 Pro上面,我只好找更舊的MySQL Workbench 8.0.18。

點選root連接MySQL伺服器的時候,MySQL Workbench就會發現連接的是不相容的資料庫伺服器版本!並且建議使用MySQL 5.6、5.7或是8.0(MySQL沒有發表過6.0版,也沒有7.0版,而是從5.7版直接跳到8.0版)。

然後點選Server功能表的Data Import資料匯入功能,然後點選insoler.sql資料庫檔案(檔案的內容是純文字,可以使用任何的文字編輯程式開啟這個檔案):

利用MySQL Workbench其實也不能完全正常匯入insoler.sql資料庫!

可能是MariaDB 10.4.11(目前最新版是10.4.13)並不支援utf8mb4_0900_ai_ci語系的關係,所以會導致匯入失敗。我使用記事本修改insoler.sql,刪除指定utf8mb4_0900_ai_ci關鍵字,就可以匯入。不過,雖然可以正常匯入,但不表示匯入的資料能正常顯示!因為是測試用,我並不會使用MariaDB資料庫來架設網站,因此就算匯入資料錯誤,也不用太在意。

在匯入insoler.sql資料庫以後,重新載入benchmark.php程式,就會看到這樣的測試畫面:

重新載入網頁,benchmark.php程式的測試結果,雖然會受到Windows 10 Pro系統與瀏覽器的影響,但基本上並沒有太大的差異,請忽略小數點0.1秒以下的位數。

安裝好Windows Update版本更新的幾天後,我又重新測試一次,但其實並沒有太大的差異。

那麼,不要使用瀏覽器(因為會需要經過Microsoft Edge瀏覽器與Apache網站伺服器),就像Linux那樣,直接在終端機畫面(這是UNIX與Linux的命令列模式)打開Windows的「命令提示字元」,直接執行php -v就會看到使用的版本是目前最新的PHP 7.4.5。

這是在相同一台MacBook Pro (16-inch, 2019)上,重新開機回到macOS Catalina 10.15.4(這是目前的最新版本),使用的是macOS內建的PHP 7.3.11(全世界所有的macOS都有內建PHP與Apache,不需要額外安裝)執行benchmark.php程式的測試結果:

這是再執行一次的執行結果。雖然會有一些差異,但誤差都在0.1秒左右。

Last login: Sat May  2 03:12:51 on ttys000
brent@MacBook-Pro ~ % cd downloads/benchmark
brent@MacBook-Pro benchmark % php -v
PHP 7.3.11 (cli) (built: Feb 29 2020 02:50:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies
brent@MacBook-Pro benchmark % php benchmark.php
insoler Benchmark 效能測試程式
程式版本:1.0
測試時間:2020年05月01日 18:14:37
PHP 版本:7.3.11
Web Server 網站系統:macOS Catalina
PHP Benchmark 效能測試
數學運算函示:1.619 秒
字串處理函示:1.854 秒
非物件導向程式,普通 PHP 副程式:2.557 秒
物件導向程式:2.470 秒
PHP 效能測試時間小計:8.500 秒
效能測試時間總計:8.500 秒

brent@MacBook-Pro benchmark % php benchmark.php
insoler Benchmark 效能測試程式
程式版本:1.0
測試時間:2020年05月01日 18:18:59
PHP 版本:7.3.11
Web Server 網站系統:macOS Catalina
PHP Benchmark 效能測試
數學運算函示:1.611 秒
字串處理函示:1.927 秒
非物件導向程式,普通 PHP 副程式:2.657 秒
物件導向程式:2.507 秒
PHP 效能測試時間小計:8.703 秒
效能測試時間總計:8.703 秒
brent@MacBook-Pro benchmark %

這是Windows 10 Pro在同一台MacBook Pro (16-inch, 2019)的執行結果:

insoler Benchmark 效能測試程式
程式版本:1.0
測試時間:2020年05月01日 18:14:37
PHP 版本:7.3.11
Web Server 網站系統:macOS Catalina
PHP Benchmark 效能測試
數學運算函示:2.522 秒
字串處理函示:15.257 秒
非物件導向程式,普通 PHP 副程式:6.478 秒
物件導向程式:6.515 秒
PHP 效能測試時間小計:30.773 秒

相同的MacBook Pro (16-inch, 2019)電腦上,你可以看到這樣的測試結果:

  • PHP 7.4.5 for Windows:物件導向程式:6.515 秒
  • PHP 7.4.5 for macOS:物件導向程式:2.507 秒

所以6.5秒 / 2.5秒 = 2.6倍!

所以在Windows 10 Pro執行相同的PHP程式(現在的網站PHP程式碼,全部都是使用物件導向程式設計,絕對不會有不使用class的傳統網站程式)反而會比macOS版還要更慢2.6倍!

換句話說,如果我想要使用Windows 10 Pro來架設網站,而想要達到相同的網頁執行速度(相當於使用者的網頁開啟速度)就必須使用比2.4 GHz 8核心Intel Core i9還要更快2倍的處理器!

  • PHP 7.4.5 for Windows:字串處理函示:15.257 秒
  • PHP 7.4.5 for macOS:字串處理函示:1.927 秒

所以15.2秒 / 1.9秒 = 8倍!

在字串處理函示部分竟然慢了8倍!就會看到令人懷疑是不是我寫的benchmark.php寫錯了什麼功能?當然是沒有寫錯!而且我並沒有針對macOS最佳化,在PHP裡面也沒有針對使用的系統是Linux、Windows、macOS最佳化的指令或是函式。

只能猜想PHP團隊使用的編譯器是微軟Visual C++ 2017有點老舊。或許使用目前最新的Visual C++ 2019,或許會好一點點。不過,我不認為微軟的Visual C++ 2019會是最好的編譯器!改用其他編譯器可能可以發揮出PHP 7.4應有的性能。

在相同的電腦上,使用Windows來架設PHP網站的話,需要比2.4 GHz 8核心Intel Core i9還要更快2倍,甚至是快8倍的處理器,我想應該是很多人都直接放棄,改用Linux來架設網站的話,說不定會跑出比PHP 7.4.5 for macOS還要更快2倍的測試成績。

蘇言霖 2020/05/02 0 192
Comments
Order by: 
Per page:
 
  • There are no comments yet
Rate
0 votes
Post info
蘇言霖
「超級懶貓級」社群網站站長
2020/05/02 (144 days ago)
Actions