>  기사  >  백엔드 개발  >  PHP 아카이브 phar의 성능 테스트

PHP 아카이브 phar의 성능 테스트

不言
不言원래의
2018-05-31 14:30:351866검색

이 기사에서는 특정 참조 가치가 있는 PHP 아카이빙 phar의 성능 테스트를 주로 소개합니다. 이제 모든 사람과 공유합니다. 필요한 친구가 참조할 수 있습니다.

PHP는 5.3부터 PHAR 아카이빙을 추가했습니다. Java ™ 기술을 사용하면 애플리케이션을 실행하는 데 필요한 모든 것이 포함된 단일 파일을 사용하여 애플리케이션을 패키지화할 수 있습니다. 이 파일은 실제로 컴파일된 애플리케이션이 아니라 아카이브 파일이라는 점에서 일반적으로 C와 같은 프로그래밍 언어로 생성되는 단일 실행 파일과 다릅니다. 따라서 JAR 파일에는 실제로 애플리케이션을 구성하는 파일이 포함되어 있지만 이러한 파일은 보안상의 이유로 신중하게 구별되지 않습니다. Phar 확장은 비슷한 개념을 기반으로 하지만 주로 PHP의 웹 환경을 위해 설계되었습니다. 또한 JAR 아카이브와 달리 Phar 아카이브는 PHP 자체에서 처리할 수 있으므로 이를 생성하거나 사용하는 데 추가 도구가 필요하지 않습니다. Phar 확장은 PHP의 새로운 개념이 아닙니다. 원래는 PHP로 작성되었으며 2005년 PEAR 라이브러리에 추가되기 전에 PHP_Archive라는 이름을 사용했습니다. 그러나 실제로 이 문제에 대한 순수 PHP 솔루션은 매우 느렸기 때문에 2007년에 순수 C 언어 확장으로 다시 작성되었으며 SPL의 ArrayAccess 개체를 사용하여 Phar 아카이브를 탐색하는 지원이 추가되었습니다. 그 이후로 사람들은 Phar 아카이빙의 성능을 향상시키기 위해 많은 노력을 해왔습니다. 현재 Phar의 사용은 매우 제한적이며 Phar의 성능 테스트는 거의 없습니다. 간단한 실험.
테스트 환경:
PHP: 5.5.10
CPU: 2GHz intel core i7
Mem: 8GB
시스템: Darwin 13.1.0
주요 테스트 포인트:
1: Phar 로딩 속도
1.1: 파일 크기는 어떤 영향을 미치나요?
1.2: 포함/요구의 영향?
1.3: Phar 스텁 콘텐츠는 어떤 영향을 미치나요?
2: Phar 코드 실행 속도
2.1 전역 함수 비교
2.2 클래스 객체
2.3 클래스 메서드
테스트의 정확성을 최대한 보장하기 위해 각 메서드를 3번 실행하고 3번의 평균을 계산합니다. . 동시에 비교를 위해 코드를 직접 사용하여 벤치마크 데이터를 얻습니다.
Phar 파일에는 주로 phar 파일을 생성하는 데 사용되는

phar-builder.php 파일이 포함되어 있습니다. 테스트 명령을 실행하기 전에 이 파일을 실행하여 phar-test.phar 파일을 생성하세요.
test_load.php는 phar 파일 로딩 속도를 테스트합니다.
src 디렉토리에 포함된 index.php 파일은 날짜.php, for.php, function.php, 날짜 테스트 파일 클래스 메소드, for.php 테스트를 포함한 스텁 파일입니다. 객체 메소드, 함수 .php 테스트 함수 메소드.
특정 첨부 코드.
첫 번째: phar 로딩 속도, include 및 require 메서드를 사용하여 테스트한 결과 큰 차이가 없는 것으로 확인되었으며 require 메서드만 사용됩니다.

$stime = microtime(true);
require './phar-test.phar';
$etime = microtime(true);
$total = $etime - $stime;
echo "phar total:".$total."s";

실행 후 효율성은 다음과 같습니다

localhost:phar ugg$ php test_phar_load.php 
phar total:0.0044760704040527s
localhost:phar ugg$ php test_phar_load.php 
phar total:0.0051448345184326s
localhost:phar ugg$ php test_phar_load.php 
phar total:0.0043849945068359s
localhost:phar ugg$ vim test_phar_load.php

평균 로딩 시간은 4.7밀리초

직접 소스코드 참조 방식과 비교했습니다.

$stime = microtime(true);
require './src/index.php';
$etime = microtime(true);
$total = $etime - $stime;
echo "src total:".$total."s\n";

실행 후 효율성은 다음과 같습니다

localhost:phar ugg$ php test_src_load.phpsrc 
total:0.0026230812072754s
localhost:phar ugg$ php test_src_load.phpsrc 
total:0.0026969909667969s
localhost:phar ugg$ php test_src_load.phpsrc 
total:0.0025439262390137s

평균 로딩은 2.6밀리초입니다
결론: 로딩 속도 비교를 통해 phar 로딩 방식은 직접 파일 로딩 방식보다 훨씬 느리며 거의 2배 정도 느립니다. 파일을 직접 참조하는 한. 동시에 phar 파일을 더 크게 만들기 위해 일부 간섭 파일을 phar 파일에 로드했는데, 10k 내에서는 로드 시간이 크게 변하지 않은 것으로 나타났습니다. 물론, 새로 추가된 파일을 스텁에 넣지는 않았습니다. 10K를 초과하는 디렉터리의 경우 파일 구성 방법을 자동 로드와 같이 지정하고 모든 파일을 하나의 파일에 포함시키지 않는 것이 목적입니다. phar의 로딩 시간은 src의 직접 로딩 시간의 약 1.8배입니다.

실행 속도 테스트
phar 메소드, 코드는 다음과 같습니다

    $stime = microtime(true);
    //require 'phar://phar-test.phar';
    require 'phar-test.phar';
    $sstime = microtime(true);
    for($i = 0; $i<10000; ++$i){
        $date = dates::next_week();
        $for = new fortest();
        $i = $for->for1to10000();
        $number = number2Chinese(&#39;12345&#39;);
    }   
    $eetime = microtime(true);
    $etime = microtime(true);
    $total = $etime - $stime;
    $total2 = $eetime - $sstime;
    echo "phar load total:".$total."s\n";
    echo "phar execution 10000 total:".$total2."s";

실행 효율성은 다음과 같습니다

localhost:phar ugg$ php test_phar_functions.php 
phar load total:0.0047600269317627s
phar execution 10000 total:0.00017499923706055s
localhost:phar ugg$ php test_phar_functions.php 
phar load total:0.004863977432251s
phar execution 10000 total:0.00017404556274414s
localhost:phar ugg$ php test_phar_functions.php 
phar load total:0.004680871963501s
phar execution 10000 total:0.00016689300537109s

클래스 메소드, 객체 인스턴스, 객체 메소드, 함수 메소드를 10000번 실행하고, 총 시간 소모는 0.17밀리초입니다.
src 실행 효율성

localhost:phar ugg$ php test_src_functions.php 
phar load total:0.0029089450836182s
phar execution 10000 total:0.00019693374633789s
localhost:phar ugg$ php test_src_functions.php 
phar load total:0.0028579235076904s
phar execution 10000 total:0.0002140998840332s
localhost:phar ugg$ php test_src_functions.php 
phar load total:0.0029168128967285s
phar execution 10000 total:0.00019478797912598s

클래스 메서드, 개체 인스턴스, 개체 메서드 및 함수 메서드를 10,000회 실행하면 총 시간 소모는 0.20밀리초입니다.
요약: 실행 속도 비교를 통해 phar 방식의 실행 속도가 직접 파일 포함 방식(0.20-0.17)/0.20*100=15%보다 빠른 것으로 나타났습니다. 실행 속도가 빠른 구체적인 이유는 다음과 같습니다. phar 메소드를 찾지 못했습니다. 인터넷에 일부 정보가 있는데, apc+include_path 설정 phar 실행 속도가 매우 빠릅니다. https://github.com/ralphschindler/test-phar-performance-apc/.
요약: PHP 아카이빙 phar 방식은 일반 파일 포함 방식보다 로딩 속도는 느리지만, 파일 포함 방식보다 실행 속도는 빠릅니다. include_path 설정과 APC 또는 OP 방식을 협력하면 phar의 로딩 속도를 최적화할 수 있습니다. 아카이브를 사용하면 PHP의 실행 속도를 향상시킬 수 있습니다. 다음 단계는 몇 가지 시도를 하는 것입니다. 1: 대규모 phar 파일을 구성하고 로딩 속도와 실행 속도를 실험합니다. 2: phar 로딩 원리 및 실행 원리를 이해합니다. 3: 패키지 개념 관리 및 종속성.

위 내용은 PHP 아카이브 phar의 성능 테스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.