雖然在十幾天前的4月11日,我才剛剛升級到全部的最新版本:
insoler社群網站正式升級到最新版macOS Catalina 10.15.4、PHP Version 7.3.15、ImageMagick 3.4.4
不過,當時PHP的最新版本並不是PHP 7.3.15,而是PHP 7.4.4。最近16 Apr 2020又發表了新的PHP 7.4.5更新版,以及PHP 7.3.17更新版,你可以在PHP社群網站上,直接下載最新的PHP版本:
https://www.php.net/downloads.php
但是當我使用Homebrew的brew指令搜尋PHP的時候,仍然只看到php@7.3版本,這就讓我覺的有點奇怪!既然PHP 7.4版都已經更新到PHP 7.4.5,為什麼在Homebrew上面仍然找不到php@7.4?
我在Google搜尋Homebrew與php 7.4以後,才發現是我使用的搜尋關鍵字的問題!我想這應該是Homebrew一直忘記把php@7.4加入到php關鍵字,以至於只用「brew search php」搜尋的時候,只能找到php@7.2與php@7.3,找不到php@7.4!
只要改變搜尋方式,使用「brew search php@7」這樣的關鍵字,就可以找到php@7.2、php@7.3、php@7.4!
insoler@una ~ % brew search php
==> Formulae
brew-php-switcher php-cs-fixer phplint phpstan
php php@7.2 phpmd phpunit
php-code-sniffer php@7.3 phpmyadmin
==> Casks
homebrew/cask/eclipse-php homebrew/cask/netbeans-php
insoler@una ~ % brew search php@7
==> Formulae
php@7.2 php@7.3 php@7.4
insoler@una ~ % brew install php@7.4
Updating Homebrew...
在這裡雖然無法確認PHP 7.4的版本,但我猜想應該是最新的PHP 7.4.5。所以就決定在另外一台Mac mini擔任的「社群網站地下室」先安裝測試看看。確認是PHP 7.4.5以後,就刪除整個Homebrew全部重新安裝!因為如果只有從PHP 7.3.15更新到PHP 7.4.5,會導致PHP某些模組無法正確更新,如果為了解決問題,可能會浪費更多時間,還不如刪除整個Homebrew,重因安裝Apache、PHP、ImageMagick... 還更快、更簡單,更不會遇到奇怪的版本相容性的問題。
這是在今天之前insoler社群網站使用的PHP版本。你可以看到是PHP Version 7.3.15。現在最新的版本是PHP 7.3.17。
當時的imagick 3.4.4搭配的版本是ImageMagick 7.0.10.0。
你可以看到在相同的網址,執行相同的phpinfo()程式,就會看到insoler社群網站目前使用的是PHP Version 7.4.5最新版!這個版本的發表時間是Build Date Apr 23 2020 02:24:02。
因為是刪除整個Homebrew全部的程式重新安裝,所以ImageMagick也升級到目前的最新版ImageMagick 7.0.10-7。
這是之前才剛剛安裝的ImageMagick 7.0.10-0版:
imagick module | enabled |
---|---|
imagick module version | 3.4.4 |
imagick classes | Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator, ImagickKernel |
Imagick compiled with ImageMagick version | ImageMagick 7.0.10-0 Q16 x86_64 2020-03-08 https://imagemagick.org |
Imagick using ImageMagick library version | ImageMagick 7.0.10-0 Q16 x86_64 2020-03-08 https://imagemagick.org |
ImageMagick copyright | © 1999-2020 ImageMagick Studio LLC |
ImageMagick release date | 2020-03-08 |
ImageMagick number of supported formats: | 238 |
這是剛剛才安裝的最新版ImageMagick 7.0.10-7。
imagick module | enabled |
---|---|
imagick module version | 3.4.4 |
imagick classes | Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator, ImagickKernel |
Imagick compiled with ImageMagick version | ImageMagick 7.0.10-7 Q16 x86_64 2020-04-20 https://imagemagick.org |
Imagick using ImageMagick library version | ImageMagick 7.0.10-7 Q16 x86_64 2020-04-20 https://imagemagick.org |
ImageMagick copyright | © 1999-2020 ImageMagick Studio LLC |
ImageMagick release date | 2020-04-20 |
ImageMagick number of supported formats: | 238 |
當然,PHP 7.4.5也有搭配PHP內建的Zend OPcache快取模組,可以加速PHP程式碼的執行速度。
insoler網站當然也有使用Zend OPcache快取模組,在所有PHP程式碼都被快取的情況下,幾乎是100%程式碼全部都有加速處理。
在前面的文章有做過PHP程式碼的Benchmark效能測試,這是上次的測試結果。你可以看到從PHP 7.1.33升級到PHP 7.3.11就快了許多,大約快了0.4〜0.5秒。
Mac mini (Late 2012) :
網站使用的 PHP 版本:7.1.33 版
非物件導向程式,普通 PHP 副程式的執行時間:4.7213530540466 秒
網站使用的 PHP 版本:7.1.33 版
PHP 物件導向程式執行時間:4.7621841430664 秒
PHP 物件導向程式執行時間:4.8421759605408 秒
Mac mini (Late 2012) :
網站使用的 PHP 版本:7.3.11 版
非物件導向程式,普通 PHP 副程式的執行時間:4.184641122818 秒
非物件導向程式,普通 PHP 副程式的執行時間:4.1889100074768 秒
網站使用的 PHP 版本:7.3.11 版
PHP 物件導向程式執行時間:4.2198650836945 秒
PHP 物件導向程式執行時間:4.4577078819275 秒
Mac mini Server (Late 2012) :使用macOS Catalina 10.15.4
網站使用的 PHP 版本:7.3.15 版
非物件導向程式,普通 PHP 副程式的執行時間:4.1465530395508 秒
非物件導向程式,普通 PHP 副程式的執行時間:4.3262758255005 秒
非物件導向程式,普通 PHP 副程式的執行時間:4.5892188549042 秒
網站使用的 PHP 版本:7.3.15 版
PHP 物件導向程式執行時間:4.2702870368958 秒
PHP 物件導向程式執行時間:4.5515449047089 秒
那麼,升級到PHP 7.4.5以後呢?
Mac mini Server (Late 2012) :使用macOS Catalina 10.15.4
網站使用的 PHP 版本:7.4.5 版
非物件導向程式,普通 PHP 副程式的執行時間:4.233882188797 秒
非物件導向程式,普通 PHP 副程式的執行時間:4.6362471580505 秒
非物件導向程式,普通 PHP 副程式的執行時間:4.5089910030365 秒
網站使用的 PHP 版本:7.4.5 版
PHP 物件導向程式執行時間:4.5526309013367 秒
PHP 物件導向程式執行時間:4.3747930526733 秒
由於我一直把「非物件導向程式,普通 PHP 副程式的執行時間」、「PHP 物件導向程式執行時間」寫在兩個測試程式,因此要同時比較的話,會有點麻煩。因此我重新寫了一個全新的Benchmark測試,也順便加入MySQL的測試。
這是在「地下室」測試的結果。使用的是與insoler正式網站完全相同規格、配備的Mac mini (Late 2012)迷你電腦主機。
其中的BxDolDb是insoler使用的海豚7.4系統的資料庫物件名稱。我使用BxDolDb物件來連接資料庫,這樣才能比較能反映insoler連接資料庫的真實成績。
insoler Benchmark 效能測試程式 | |
---|---|
版本 | 1.0 |
時間 | 2020年04月26日 05:16:47 |
PHP 版本 | 7.4.5 |
Web Server 網站系統 | macOS Catalina |
PHP Benchmark 效能測試 | |
數學運算函示 | 3.212 秒 |
字串處理函示 | 3.346 秒 |
非物件導向程式,普通 PHP 副程式 | 4.259 秒 |
物件導向程式 | 4.119 秒 |
PHP 效能測試時間小計 | 14.937 秒 |
MySQL Benchmark 資料庫效能測試 | |
MySQL Server 資料庫伺服器版本 | 8.0.19 |
BxDolDb 物件連接 MySQL 伺服器時間 | 0.002 秒 |
insoler 相簿首頁的資料查詢時間 | 0.586 秒 |
SELECT BENCHMARK 指令執行時間 | 0.544 秒 |
MySQL 資料庫效能測試時間小計 | 1.131 秒 |
效能測試時間總計 | 16.068 秒 |
這是在insoler首頁執行的相同測試結果。因為是使用完全相同規格、配備的Mac mini Server (Late 2012),所以你甚至可以看到「物件導向程式 4.119 秒」都是4.1秒的相同測試成績!小數點1位以下的數字可以忽略,因此「非物件導向程式,普通 PHP 副程式」的測試結果也都是4.2秒!
跑出「物件導向程式設計」比「非物件導向,傳統副程式呼叫」還要更快0.1秒的執行結果!PHP的研發團隊實力真是令人敬佩!
insoler Benchmark 效能測試程式 | |
---|---|
版本 | 1.0 |
時間 | 2020年04月26日 05:18:12 |
PHP 版本 | 7.4.5 |
Web Server 網站系統 | macOS Catalina |
PHP Benchmark 效能測試 | |
數學運算函示 | 3.085 秒 |
字串處理函示 | 3.264 秒 |
非物件導向程式,普通 PHP 副程式 | 4.215 秒 |
物件導向程式 | 4.119 秒 |
PHP 效能測試時間小計 | 14.683 秒 |
MySQL Benchmark 資料庫效能測試 | |
MySQL Server 資料庫伺服器版本 | 5.6.41 |
BxDolDb 物件連接 MySQL 伺服器時間 | 0.005 秒 |
insoler 相簿首頁的資料查詢時間 | 0.002 秒 |
SELECT BENCHMARK 指令執行時間 | 0.267 秒 |
MySQL 資料庫效能測試時間小計 | 0.273 秒 |
效能測試時間總計 | 14.956 秒 |
而「insoler 相簿首頁的資料查詢時間」使用的也是insoler相簿首頁的真實SQL指令。在MySQL 8.0.19已經移除了Query Cache查詢快取功能,因此查詢速度會很明顯比MySQL 5.6.41慢很多!
MySQL 8.0: Retiring Support for the Query Cache
也許MySQL社群認為MySQL 5.6.41的Query Cache查詢快取功能在許多情況,反而會遇到更多問題,因此才需要移除查詢資料快取功能,但是對我們來說,使用Query Cache查詢快取功能從來都沒有遇到任何問題!
也因此我並不打算把資料庫升級到MySQL 8.0.19!這樣反而會導致資料查詢速度從0.002秒暴增到0.5秒!在MySQL沒有提出更好的解決辦法以前,我只能繼續使用有點老舊的MySQL 5.6.41,拒絕升級到目前的最新版MySQL 8.0.19!