개발 꿀팁/PHP

php7과 php5 대비

Jammie 2022. 6. 28. 16:55
반응형

PHP7이 한 발씩.
PHP7 공식 출시데뷔한 지 1년 반이 지났는데, 데뷔하자마자 구형보다 몇 배 빠르다고 호들갑을 떨었고, 각종 오픈소스 프레임워크나 시스템 운영이 PHP7에서 몇 배나 빨라졌다니 어차피 언론이나 개발자가 부추기고 있으니 아니, 칭찬이 자자할 일이다.
조용히 너희들을 볼게핍박하다.

일반 휴대전화 시스템 업그레이드내가 맨 마지막에 뛰었는데, 구덩이를 밟기 싫어서 iOS나 안드로이드 같은 시스템에도 버그가 나오더라. 하물며 세계에서 가장 많은 사람이 해킹당한 언어였다.

오늘 때가 되었으니 보라.PHP7에 전설처럼 왕튀김이 있나 봐요.
PHP 버전 두 개 설치
HTTP: //php.net/ 이미 최신 PHP7의 최신 버전이 있으니 여러분 스스로 다운로드 하실 수 있습니다.
PHP5와 P를 테스트하기 위해서HP7(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 '',
  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['id']   = $row['id'];
    $tmp['name'] = $row['name'];
  }
}

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보다 1초 적습니다!1초는 짧지만 1밀리초는 아니다.

3.PHP 프레임 테스트
씽크프
국내에서는 씽크프 프레임 워크를 선호하고 최신 씽크프5를 선택할 게 분명하다.제가 여기서 바로 홈페이지에서 다운받은 씽크피 5.0.9판본.

(1) 프레임 입구 시험
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은 조금 빨랐다.

(2) 프레임 논리 시험
프레임 입구에서 첫 번째 단계의 논리를 다중화한다.

<?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배 향상됩니다!

라라벨
그리고 지금 가장 핫한 PHP 아티스트의 프레임을 테스트해본다.

(a) 프레임 입구 시험
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

라라벨의 프레임 입구 테스트에서 PHP5와 PHP7은 큰 차이를 보이지 않았지만 PHP5가 최고 0.081s까지 빨라도 PHP7 버전보다 가장 느린 0.067s보다 느렸다.그래서 PHP7이 한 수 위다.

(2) 프레임 논리 시험
논리를 조금 더 추가해 보고, 씽크프처럼 테스트 로직을 다중화한다.
먼저 laravel 라우팅을 수정하고 UserController를 직접 호출하는 index 메서드:

Route::get('/', 'UserController@index');

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배 향상
스트레스 테스트
1,000건의 요청, 50건의 동시 접수
PHP5 버전:
4

스트레스 테스트를 거쳐 PH에서P7버전에서는 낱개로 볼 수 있습니다요청 시간과 요청 완료 시간 및 각 중대요청을 받은 실제 실행 시간의 평균값 모두 시간이 소요됩니다더 적게, 가장 중요한 성능 지표인 QPS도PHP5보다 높은 버전。

PHP7의 opcache 성능 테스트
opcache 열기:

image.png
image.png

image.png
image.png

슬롯! opca를 켰습니다che의 PHP7 역시.이륙 템포, 오픈되지 않은 PHP7 대비성능이 10배 향상되어 PHP5보다 향상되었습니다.20배 올라갑니다!겁나냐고!
PHP 스크립트 테스트 데이터:다음:
PHP7 vs PHP5.png
순수 php 스크립트 테스트 과정PHP7 성능은 대략 PHP5의 3~4배.
스트레스 테스트 데이터는 다음과 같다.
PHP5vsPHP7 vs PHP7+OPCACHE.png
결론:
본문은 PHP7과 PHP5에 대해 간단한 대비를 실시하면 성능은 확실히 3~4배 향상된다. php 순수 스크립트나 프레임워크에서 PHP7 고성능의 표현은 모두 일치한다.

PHP7은 빠르게, PHP7+OpCache는 빠르게, PHP7은 확실히 빠르게, PHP의 새로운 시대가 왔다, 빨리!

반응형