通常「新版本」應該都會比「舊版本」更好,解決了更多Bug問題,更多安全性漏洞,增加了更多新的功能。不過,在沒有升級更換電腦主機的前提下,新增更多的功能,就意味著「新版本」很可能會比「舊版本」跑的還要更慢!Windows就是這樣的一個實例。Windows 10絕對比Windows 7還要慢,當然,Windows 7絕對比Windows XP還要慢。
我在前面兩篇測試過PHP 5.5.38、PHP 7.1.23。請先閱讀這兩篇文章:
「物件導向程式」與「非物件導向程式」的PHP 5.5、PHP 7執行速度效能大測試!
Dolphin 7.3.5與PHP 5.5.38、Dolphin 7.4與PHP 7.1.23執行速度效能大測試!
這次要測試的則是macOS Mojave 10.14.4內建的PHP 7.1.23與PHP 7.2.15(這是使用Homebrew下載安裝),到底是誰的執行速度比較快?為了比較容易區別使用的PHP版本,這次我特別追加PHP Version的版本號罵顯示程式,以便可以一目瞭然。
使用的電腦全部都是Mac mini 2012的主機,所有的硬體配備都完全相同。
Mac mini with OS X Server
規格
2.6GHz 四核心 Intel Core i7
4GB 記憶體
1個 250B SSD 固態硬碟
Intel HD Graphics 4000
OS X Mavericks 10.9
OS X Server
估計出貨時間:
24 小時內
免額外付費的運送服務
NT$ 32,900
macOS 系統使用的 PHP version 版本:5.5.38 版
PHP 物件導向程式執行時間:5.7253530025482 秒
macOS 系統使用的 PHP version 版本:5.5.38 版
非物件導向程式,普通 PHP 副程式的執行時間:4.2721040248871 秒
你可以很清楚的看到,在PHP 5.6以下的版本,使用class的物件導向程式,因為多了許多class物件操作指令,絕對會比完全不使用class的非物件導向程式(結構化程式)要更慢很多。但是這個情況在PHP 7.1.23就改善許多,甚至到了PHP 7.2.15版,竟然首次「逆轉勝」!
macOS 系統使用的 PHP version 版本:7.2.15 版
PHP 物件導向程式執行時間:1.8955140113831 秒
macOS 系統使用的 PHP version 版本:7.2.15 版
非物件導向程式,普通 PHP 副程式的執行時間:1.9621949195862 秒
雖然只有快了「0.1秒」但是可以讓傳統的「結構化程式設計」與「物件導向程式設計」的執行速度幾乎相同,甚至還更快了0.1秒,這幾乎是奇蹟!特別是在「直譯式電腦語言」上。如果是「編譯式電腦語言」的話,這就完全不是奇蹟,甚至一點都不神奇!這是因為,只要Compiler寫的好,是否使用class物件導向,編譯的結果應該會幾乎完全一樣,不會因為使用class的關係,而導致程式跑的比傳統的非物件導向程式還要更慢。
macOS 系統使用的 PHP version 版本:7.1.23 版
PHP 物件導向程式執行時間:2.5994031429291 秒
macOS 系統使用的 PHP version 版本:7.1.23 版
非物件導向程式,普通 PHP 副程式的執行時間:2.4263010025024 秒
你可以看到在macOS Mojave 10.14.4內建的PHP 7.1.23上,物件導向程式的執行速度還是慢0.1秒左右。而到了新的PHP 7.2.15版,則是變成逆轉勝,物件導向程式的執行速度更快0.1秒!
macOS 系統使用的 PHP version 版本:7.2.15 版
PHP 物件導向程式執行時間:1.8118388652802 秒
macOS 系統使用的 PHP version 版本:7.2.15 版
非物件導向程式,普通 PHP 副程式的執行時間:1.9002208709717 秒
由於是規格配備完全相同的Mac mini 2012的主幾,所以從「開發研究室」把新的PHP 7.2.15的所有相關檔案copy到insoler的正式主機上,執行相同的測試程式,也會得到幾乎完全相同的測試結果。
PHP 7.1.23執行結果:
2019-03-30 10:39:42 insoler 首頁 index.php 程式的執行時間:0.054601907730103
2019-03-30 10:41:39 insoler 首頁 index.php 程式的執行時間:0.057298183441162
2019-03-30 10:43:15 insoler 首頁 index.php 程式的執行時間:0.045706987380981
2019-03-30 10:43:33 insoler 首頁 index.php 程式的執行時間:0.039445877075195
2019-03-30 10:44:13 insoler 首頁 index.php 程式的執行時間:0.039648056030273
2019-03-30 10:44:17 insoler 首頁 index.php 程式的執行時間:0.048923969268799
2019-03-30 10:45:28 insoler 首頁 index.php 程式的執行時間:0.045610904693604
2019-03-30 10:45:33 insoler 首頁 index.php 程式的執行時間:0.041272878646851
2019-03-30 10:45:40 insoler 首頁 index.php 程式的執行時間:0.040936946868896
2019-03-30 10:47:28 insoler 首頁 index.php 程式的執行時間:0.055050134658813
2019-03-30 10:49:46 insoler 首頁 index.php 程式的執行時間:0.051954030990601
2019-03-30 10:56:26 insoler 首頁 index.php 程式的執行時間:0.043704986572266
PHP 7.2.15執行結果:
2019-03-30 11:06:34 insoler 首頁 index.php 程式的執行時間:0.038136959075928
2019-03-30 11:22:09 insoler 首頁 index.php 程式的執行時間:0.056480169296265
2019-03-30 11:23:40 insoler 首頁 index.php 程式的執行時間:0.052541971206665
2019-03-30 11:37:03 insoler 首頁 index.php 程式的執行時間:0.064651012420654
2019-03-30 11:39:08 insoler 首頁 index.php 程式的執行時間:0.041893005371094
2019-03-30 11:55:37 insoler 首頁 index.php 程式的執行時間:0.054656028747559
2019-03-30 11:55:41 insoler 首頁 index.php 程式的執行時間:0.094050884246826
2019-03-30 11:56:28 insoler 首頁 index.php 程式的執行時間:0.040458917617798
2019-03-30 11:56:32 insoler 首頁 index.php 程式的執行時間:0.041661024093628
2019-03-30 11:56:38 insoler 首頁 index.php 程式的執行時間:0.042555093765259
2019-03-30 11:59:19 insoler 首頁 index.php 程式的執行時間:0.058319091796875
2019-03-30 12:11:16 insoler 首頁 index.php 程式的執行時間:0.075311183929443
PHP 7.1.23執行結果:
2019-03-30 10:43:07 insoler 討論區首頁 index.php 程式的執行時間:0.13185381889343
2019-03-30 10:43:31 insoler 討論區首頁 index.php 程式的執行時間:0.066219806671143
2019-03-30 10:43:52 insoler 討論區首頁 index.php 程式的執行時間:0.13605904579163
2019-03-30 10:45:55 insoler 討論區首頁 index.php 程式的執行時間:0.14937210083008
2019-03-30 10:46:44 insoler 討論區首頁 index.php 程式的執行時間:0.13274812698364
2019-03-30 10:46:50 insoler 討論區首頁 index.php 程式的執行時間:0.14366507530212
2019-03-30 10:46:54 insoler 討論區首頁 index.php 程式的執行時間:0.13774299621582
2019-03-30 10:48:00 insoler 討論區首頁 index.php 程式的執行時間:0.13352704048157
2019-03-30 10:48:46 insoler 討論區首頁 index.php 程式的執行時間:0.060608863830566
2019-03-30 10:49:20 insoler 討論區首頁 index.php 程式的執行時間:0.1601300239563
PHP 7.2.15執行結果:
2019-03-30 11:55:56 insoler 討論區首頁 index.php 程式的執行時間:0.15509080886841
2019-03-30 11:56:21 insoler 討論區首頁 index.php 程式的執行時間:0.13271999359131
2019-03-30 11:56:31 insoler 討論區首頁 index.php 程式的執行時間:0.066856861114502
2019-03-30 11:56:35 insoler 討論區首頁 index.php 程式的執行時間:0.058532953262329
2019-03-30 11:57:03 insoler 討論區首頁 index.php 程式的執行時間:0.13978099822998
2019-03-30 11:57:18 insoler 討論區首頁 index.php 程式的執行時間:0.15358519554138
2019-03-30 11:57:24 insoler 討論區首頁 index.php 程式的執行時間:0.13007307052612
2019-03-30 11:57:26 insoler 討論區首頁 index.php 程式的執行時間:0.14406895637512
2019-03-30 12:12:26 insoler 討論區首頁 index.php 程式的執行時間:0.16752290725708
2019-03-30 12:12:28 insoler 討論區首頁 index.php 程式的執行時間:0.17948794364929
2019-03-30 12:12:43 insoler 討論區首頁 index.php 程式的執行時間:0.062814950942993
2019-03-30 12:12:57 insoler 討論區首頁 index.php 程式的執行時間:0.14633393287659
2019-03-30 12:13:04 insoler 討論區首頁 index.php 程式的執行時間:0.13720512390137
2019-03-30 12:13:05 insoler 討論區首頁 index.php 程式的執行時間:0.091001033782959
雖然在執行測試程式的時候,「物件導向程式」的部分,確實是PHP 7.2.15的「1.81秒」比PHP 7.1.23的「2.59秒」快很多!但是,光是比較「測試程式的執行速度」並沒有任何意義!實際上執行Dolphin 7.4的網站程式碼,到底是誰比較快?
從以上的測試時間來看,你可以發現這兩者之間並沒有太大的差異!我想這應該是PHP程式碼跑的再怎樣快,但是正式的網站都需要執行許多的MySQL查詢指令。因此就算是PHP 7.2.15搭配龜速的MySQL指令以後,PHP程式碼還是要等MySQL傳回指令的執行結果,導致實際上無論是PHP 7.1.23還是PHP 7.2.15的執行結果並沒有太大的差異!
既然PHP 7.1.23與PHP 7.2.15實際執行「正式網站」的速度都差不多,當然就不用太過於拘泥於非要使用PHP 7.2.15。不過,我想,如果網站上有非常多人上線的場合,應該還是PHP 7.2.15可以同時處理更多人,而不會導致Web Server塞車跑不動。
我使用的PHP 7.2.15環境是:
有安裝與使用PHP專用的OPcache快取模組。
當然也有安裝目前的最新版本imagick。
以及只能在PHP 7.2上面使用的老舊版本ssh2。太過老舊的ssh2 1.1.2目前無法在PHP 7.3上使用。
雖然表面上好像PHP 7.2.15比PHP 7.1.23更好。但是從Homebrew下載安裝的PHP 7.2.15很明顯與macOS內建的Apache版本不相容!會導致Apache突然斷線,無法開啟網頁!
會在Apache的error_log錯誤記錄裡面看到許多這樣的錯誤訊息:
[core:notice] [pid 805] AH00052: child pid 827 exit signal Segmentation fault (11)
我搜尋一下Google,發現這個錯誤訊息從2007年到目前最新的PHP 7.3都有!換句話說,這個問題一直都沒有徹底解決過!
“[notice] child pid XXXX exit signal Segmentation fault (11)” in apache error.log [closed]
Important : Apache exit signal Segmentation fault (11) - PHP - Blank page
php7.3-intl: Segfaults after apache2 graceful restart
Bug #75621 Opcache crashes Apache possible with bad chars
會一直無法解決這個問題(雖然也有可以解決的版本,但也只是限於某些「穩定版」)當然是因為Apache與PHP根本是完全不同的團隊!更慘的是PHP底下還有很多外掛模組,例如ssh2、imagick等全部都是完全不同的團隊!
簡單的說,這些根本完全是「雜牌大軍」!無論這些「雜牌大軍」有多知名,全球有幾億網站都使用他們寫的程式都一樣!想要靠「雜牌大軍」組合出一個絕對完全沒有任何問題的網站環境,根本是「不可能的任務」!
也因此會導致常常無法升級到新的版本!因為只要升級到新版本,就絕對會出問題!例如PHP 7.3就無法與過於老舊的ssh2一起使用!