Post view

「物件導向程式」PHP 7.2.15真的比PHP 7.1.23的執行速度還要更快?

通常「新版本」應該都會比「舊版本」更好,解決了更多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

在mail.insoler.com的研究開發室主機進行測試

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的關係,而導致程式跑的比傳統的非物件導向程式還要更慢。

在insoler.com的正式主機上進行測試

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與PHP 7.2.15執行Dolphin 7.4的速度測試結果

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.1.23與PHP 7.2.15到底誰比較快?

雖然在執行測試程式的時候,「物件導向程式」的部分,確實是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.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一起使用!

蘇言霖 2019/03/31 0 1163
Comments
Order by: 
Per page:
 
  • There are no comments yet
Rate
0 votes
Post info
蘇言霖
「超級懶貓級」社群網站站長
2019/03/31 (1851 days ago)
Actions