目錄
安裝兩個PHP版本
PHP7和PHP5的對決
1. 純php腳本測試
2.php資料庫操作測試
3.PHP框架測試
thinkphp
laravel
首頁 後端開發 PHP7 PHP7真的有那麼厲害嗎?

PHP7真的有那麼厲害嗎?

Jul 07, 2021 am 09:38 AM
php7

PHP7正式發佈到現在已經一年半了,剛出道就號稱比舊版本快了幾倍,各種開源框架或系統運行在PHP7上速度效率提高了幾倍,反正不管是媒體還是開發者都在煽風點火,不,應該是讚不絕口。今天我們就來測試看看效果。

PHP7真的有那麼厲害嗎?

PHP7正式發佈到現在已經一年半了,剛出道就號稱比舊版本快了幾倍,各種開源框架或系統運行在PHP7上速度效率提高了幾倍,反正不管是媒體還是開發者都在煽風點火,不,應該是讚不絕口。

我就靜靜看你們裝逼,不說話。

一般手機系統升級我是跑最後的,因為不願意踩坑,畢竟iOS和Android這種系統都會出現bug,何況世界上被人駭的最多的語言。

今日時機已到,看看PHP7有沒有傳說的那麼王炸。

安裝兩個PHP版本

http://php.net/ 已經有最新PHP7的最新版本,大家可自行下載。

為了測試PHP5和PHP7(PHP6已被放棄,心疼1s)的效能,我在不同的目錄安裝了兩個php版本。

安裝過程就略過了,無論原始碼安裝或套件管理工具安裝,記得自己的路徑即可。

PHP7:

# /usr/local/php7/bin/php -v
PHP 7.1.5 (cli) (built: May 13 2017 23:36:41) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
登入後複製

PHP5:

# /usr/bin/php -v
PHP 5.6.30 (cli) (built: Jan 19 2017 22:31:39) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
登入後複製

環境說明:為了確保最佳的測試效果,本次測試在直接在生產環境進行,更逼近真實情況。

作業系統:CentOS 7.2 64位元

基本設定:1核心1GB 1Mbps

主機品牌:騰訊雲端

PHP7和PHP5的對決

1. 純php腳本測試

vim test.php

$arr = array();
for ($i = 0; $i < 500000; $i++) { 
    $arr[$i] = $i; 
    }
    $tmp = array(); 
    foreach ($arr as $i) { 
        if ($i % 2 == 0) { 
            $is_exists = array_key_exists($i, $arr);
            if ($is_exists) { 
                array_push($tmp, $i); 
                } 
            }
        }
登入後複製

PHP5版本測試:

time /usr/bin/php test.php 
real    0m0.301s
user    0m0.239s
sys     0m0.050s
--------------------------
time /usr/bin/php test.php
real    0m0.310s
user    0m0.241s
sys     0m0.054s
--------------------------
time /usr/bin/php test.php
real    0m0.289s
user    0m0.238s
sys     0m0.050s
登入後複製

PHP7版本測試:

time /usr/local/php7/bin/php test.php

real    0m0.087s
user    0m0.063s
sys     0m0.024s
-------------------------------------
time /usr/local/php7/bin/php test.php

real    0m0.106s
user    0m0.073s
sys     0m0.033s
--------------------------------------
time /usr/local/php7/bin/php test.php

real    0m0.083s
user    0m0.061s
sys     0m0.022s
登入後複製

通過資料可以看出來,單純的php腳本測試,可以看出php7效能提升了3到4倍。

2.php資料庫操作測試

首先我們建立一個使用者表:

Table: test_user
Create Table: CREATE TABLE `test_user` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(100) NOT NULL DEFAULT &#39;&#39;, PRIMARY KEY (`uid`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
登入後複製

給test_user表插入一條資料:

insert into test_user (uid,name) values (1,"dada");
MariaDB [test]> select * from test_user;
+-----+------+
| uid | name | +-----+------+ | 1 | dada | +-----+------+
登入後複製

建立資料庫測試腳本test_db.php,確保你的兩個PHP版本都安裝了PDO擴充。

/usr/bin/php -m|grep pdo
pdo_mysql
pdo_sqlite

/usr/local/php7/bin/php -m|grep pdo
pdo_mysql
pdo_sqlite
登入後複製

我的兩個PHP版本已經安裝了PDO(不要再使用php_mysql擴展,已經過時了,PHP7已經完全拋棄,mysqli也不建議使用)。

接下來我們透過PDO編寫腳本,測試select執行50萬次的效能比較:

$host = "yourHost";
$user = "yourUser";
$pass = "yourPass";
$db   = "test"; 
$port = 3306; 
try { 
    $dbh = new PDO("mysql:host=$host;dbname=$db", $user, $pass); 
    echo "Connected<p>"; 
} 
catch (Exception $e) { 
    echo "Unable to connect: " . $e->getMessage() ."<p>"; 
    } 
$sql = "select SQL_NO_CACHE * from test_user;"; 
$tmp = array(); 
for ($i=1; $i<=500000; $i++) { 
    $ret = $dbh->query($sql); 
    foreach ($ret as $row) { 
        $tmp[&#39;id&#39;] = $row[&#39;id&#39;]; 
        $tmp[&#39;name&#39;] = $row[&#39;name&#39;]; 
        } 
    }
登入後複製

PHP5測試test_db.php:

time /usr/bin/php test_db.php
real    0m48.396s
user    0m11.149s  
sys     0m3.998s

real    0m51.447s
user    0m11.800s
sys     0m4.395s

real    0m51.517s
user    0m11.733s
sys     0m4.439s
登入後複製

PHP7測試test_db.php:

real    0m47.900s
user 0m9.875s 
sys 0m4.130s 
real 0m46.977s 
user 0m9.760s 
sys 0m3.983s 
real 0m50.010s 
user 0m10.268s 
sys 0m4.307s
登入後複製

這次腳本執行了50w次查詢,user執行時間PHP7執行的腳本幾乎都比PHP5少一秒!是少一秒不是一毫秒。

3.PHP框架測試

  • thinkphp

#國內肯定是首選thinkphp框架,選擇最新的thinkphp5。我這裡直接在官網下載的thinkphp5.0.9版本。

  • (一)框架入口測試

PHP5下的測試:

time /usr/bin/php ./public/index.php
real    0m0.036s
user    0m0.026s 
sys 0m0.010s 
real 0m0.038s 
user 0m0.026s 
sys 0m0.012s 
real 0m0.041s 
user 0m0.032s 
sys 0m0.009s
登入後複製

PHP7下的測試:

time /usr/local/php7/bin/php ./public/index.php
real    0m0.027s
user    0m0.021s
sys     0m0.005s

real    0m0.027s
user    0m0.018s
sys     0m0.009s

real    0m0.025s
user    0m0.023s
sys     0m0.002s
登入後複製

在入口測試下,可以看到PHP和PHP7沒有太大的差別,但PHP7還是稍微快一點。

  • (二)框架邏輯測試
    在框架入口中重複使用第一步的邏輯:
<?php
namespace app\index\controller; 
class Index { 
    public function index() { 
        $arr = array(); 
        for ($i = 0; $i < 500000; $i++) { 
            $arr[$i] = $i;
        } 
        $tmp = array(); 
        foreach ($arr as $i) { 
            if ($i % 2 == 0) { 
                $is_exists = array_key_exists($i, $arr); 
                if ($is_exists) { 
                    array_push($tmp, $i); 
                    } 
                } 
            } 
        } 
  }
登入後複製

PHP5版本:

time /usr/bin/php ./public/index.php
real    0m0.538s
user    0m0.463s 
sys 0m0.072s 
real 0m0.454s 
user 0m0.386s 
sys 0m0.065s 
real 0m0.387s 
user 0m0.331s 
sys 0m0.055s
登入後複製

PHP7版本:

time /usr/local/php7/bin/php ./public/index.php
real    0m0.150s
user    0m0.123s
sys     0m0.024s

real    0m0.137s
user    0m0.105s
sys     0m0.031s

real    0m0.123s
user    0m0.096s
sys     0m0.026s
登入後複製

在thinkphp框架中使用PHP7版本,效能提升大約是PHP5版本的4倍!

  • laravel

然後我們測試下現在最火熱的PHP藝術家的框架。

  • (一) 框架入口測試
    PHP5版本:
time /usr/bin/php ./public/index.php

real    0m0.104s
user    0m0.081s 
sys 0m0.022s 
real 0m0.148s 
user 0m0.122s 
sys 0m0.025s 
real 0m0.122s 
user 0m0.100s 
sys 0m0.021s
登入後複製

PHP版本

time /usr/local/php7/bin/php ./public/index.php

real    0m0.079s
user    0m0.064s
sys     0m0.015s

real    0m0.081s
user    0m0.067s
sys     0m0.014s

real    0m0.067s
user    0m0.054s
sys     0m0.013s
登入後複製

我們可以看到laravel的框架入口測試中,PHP5和PHP7的表現差異不大,但即使PHP5最高快的0.081s也比PHP7版本最慢的0.067s慢。所以PHP7還是更勝一籌。

  • (二)框架邏輯測試
    試著增加一點邏輯,和thinkphp一樣,重複使用測試邏輯。先修改laravel路由,直接呼叫UserController的index方法:
Route::get(&#39;/&#39;, &#39;UserController@index&#39;);
登入後複製

在index方法中寫入測試邏輯:

public function index() { 
    $arr = array(); 
    for ($i = 0; $i < 500000; $i++) { 
        $arr[$i] = $i; 
    } 
    $tmp = array(); 
    foreach ($arr as $i) { 
        if ($i % 2 == 0) { 
            $is_exists = array_key_exists($i, $arr); 
            if ($is_exists) { 
                array_push($tmp, $i); 
             } 
         } 
      } 
  }
登入後複製

PHP5版本

time /usr/bin/php ./public/index.php
real    0m0.510s
user    0m0.377s 
sys 0m0.079s 
real 0m0.627s 
user 0m0.447s 
sys 0m0.091s 
real 0m0.519s 
user 0m0.436s 
sys 0m0.079s
登入後複製

PHP7版本

time /usr/local/php7/bin/php ./public/index.php

real    0m0.201s
user    0m0.167s
sys     0m0.032s

real    0m0.216s
user    0m0.174s
sys     0m0.040s

real    0m0.169s
user    0m0.134s
sys     0m0.034s
登入後複製

PHP7效能提升了3到4倍

#推薦學習:php影片教學

結論:

本文對PHP7和PHP5進行簡單對比,效能確實有3到4倍提升,無論是在php純腳本中,或是在框架中,PHP7高效能的表現都是一致的。

PHP7很快,PHP7 OpCache飛快,PHP7確實牛逼,PHP的新時代已來臨,趕緊用起來!

以上是PHP7真的有那麼厲害嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

php7.0怎麼安裝mongo擴展 php7.0怎麼安裝mongo擴展 Nov 21, 2022 am 10:25 AM

php7.0安裝mongo擴充的方法:1、建立mongodb使用者群組和使用者;2、下載mongodb原始碼包,並將原始碼包放到“/usr/local/src/”目錄下;3、進入“src/”目錄;4、解壓縮原始碼包;5、建立mongodb檔案目錄;6、將檔案複製到「mongodb/」目錄;7、建立mongodb設定檔並修改設定即可。

php7檢測tcp埠不好用怎麼解決 php7檢測tcp埠不好用怎麼解決 Mar 22, 2023 am 09:30 AM

在php5中,我們可以使用fsockopen()函數來偵測TCP埠。這個函數可以用來開啟一個網路連接和進行一些網路通訊。但是在php7中,fsockopen()函數可能會遇到一些問題,例如無法開啟連接埠、無法連接到伺服器等。為了解決這個問題,我們可以使用socket_create()函數和socket_connect()函數來偵測TCP埠。

php7.0安裝了插件還是顯示未安裝怎麼辦 php7.0安裝了插件還是顯示未安裝怎麼辦 Apr 02, 2024 pm 07:39 PM

解決 PHP 7.0 中插件未顯示已安裝問題的方法:檢查插件配置並啟用插件。重新啟動 PHP 以套用配置變更。檢查插件檔案權限,確保其正確。安裝遺失的依賴項,以確保插件正常運作。如果其他步驟都失敗,則重建 PHP。其他可能原因包括外掛程式版本不相容、載入錯誤版本或 PHP 配置問題。

PHP 伺服器環境常見問題指南:快速解決常見難題 PHP 伺服器環境常見問題指南:快速解決常見難題 Apr 09, 2024 pm 01:33 PM

PHP伺服器環境常見的解決方法包括:確保已安裝正確的PHP版本和已複製相關檔案到模組目錄。暫時或永久停用SELinux。檢查並配置PHP.ini,確保已新增必要的擴充功能和進行正確設定。啟動或重新啟動PHP-FPM服務。檢查DNS設定是否有解析問題。

php7.0怎麼安裝部署 php7.0怎麼安裝部署 Nov 30, 2022 am 09:56 AM

php7.0安裝部署的方法:1、到PHP官網下載與本機系統對應的安裝版本;2、將下載的zip檔案解壓縮到指定目錄;3、開啟命令列窗口,在「E:\php7」目錄下運行“php -v”命令即可。

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

在Docker環境中使用PECL安裝擴展時為什麼會報錯?如何解決? 在Docker環境中使用PECL安裝擴展時為什麼會報錯?如何解決? Apr 01, 2025 pm 03:06 PM

在Docker環境中使用PECL安裝擴展時報錯的原因及解決方法在使用Docker環境時,我們常常會遇到一些令人頭疼的問�...

php8和php7哪個好 php8和php7哪個好 Nov 16, 2023 pm 03:09 PM

PHP8相較於PHP7在效能、新特性和語法改進、型別系統、錯誤處理和擴充等方面都有一些優勢和改進。然而,選擇使用哪個版本要根據特定的需求和專案情況來決定。詳細介紹:1、效能提升,PHP8引進了Just-in-Time(JIT)編譯器,可以提高程式碼的執行速度;2、新特性和語法改進,PHP8支援命名參數和可選參數的聲明,使得函數呼叫更加靈活;引入了匿名類別、屬性的類型聲明等等。

See all articles