PHP에서 복제본과 신규의 성능 비교(코드 예)

藏色散人
풀어 주다: 2023-04-06 13:36:02
앞으로
3964명이 탐색했습니다.

클론과 신규를 함께 비교하면 안 됩니다. 하지만 clone이나 new를 사용할 수 있는 몇 가지 시나리오가 있을 수 있는데, 이때 어떤 것을 선택해야 할까요?

저는 두 개의 테스트를 작성했습니다. 첫 번째는 빈 클래스를 선언하는 것이고, 두 번째는 생성자와 속성이 있는 클래스입니다. 또한 PHP 직렬화 테스트도 추가했습니다.

국제 연습에서는 코드를 직접 입력하면 한눈에 알 수 있습니다.

Code

<?php
define(&#39;TEST_COUNT&#39;, 10000);
  
function test($name, $callable)
{
    $time = microtime(true);
    $callable();
    echo $name, &#39; time: &#39;, microtime(true) - $time, &#39;s&#39;, PHP_EOL;
}
// 空的类 
class A
{
     
} 
function test1()
{
    echo &#39;空的类:&#39;, PHP_EOL;
    $a = new A;
    test(&#39;A clone&#39;, function() use($a){
        for($i = 0; $i < TEST_COUNT; ++$i)
        {
            $obj = clone $a;
        }
    });
    test(&#39;A new&#39;, function(){
        for($i = 0; $i < TEST_COUNT; ++$i)
        {
            $obj = new A;
        }
    });
    $serialize = serialize($a);
    test(&#39;A unserialize&#39;, function() use($serialize){
        for($i = 0; $i < TEST_COUNT; ++$i)
        {
            $obj = unserialize($serialize);
        }
    });
} 
test1(); 
// 带构造方法、属性的类 
class B
{
    public $data;
 
    public function __construct($data)
    {
        $this->data = $data;
    }
} 
function test2()
{
    echo &#39;带构造方法、属性的类:&#39;, PHP_EOL;
    $constructData = [
        &#39;id&#39;            =>  1,
        &#39;name&#39;          =>  &#39;imi 框架牛逼&#39;,
        &#39;description&#39;   =>  &#39;IMI 是一款基于 Swoole 开发的协程 PHP 开发框架,拥有常驻内存、协程异步非阻塞IO等优点。&#39;,
        &#39;url&#39;           =>  &#39;https://www.imiphp.com&#39;,
    ];
    $a = new B($constructData);
    test(&#39;B clone&#39;, function() use($a){
        for($i = 0; $i < TEST_COUNT; ++$i)
        {
            $obj = clone $a;
        }
    });
    test(&#39;B new&#39;, function() use($a){
        for($i = 0; $i < TEST_COUNT; ++$i)
        {
            $obj = new B($a->data);
        }
    });
    $serialize = serialize($a);
    test(&#39;B unserialize&#39;, function() use($serialize){
        for($i = 0; $i < TEST_COUNT; ++$i)
        {
            $obj = unserialize($serialize);
        }
    });
} 
test2();
로그인 후 복사

실행 결과

빈 클래스:

A clone time: 0.0015249252319336s
A new time: 0.00090503692626953s
A unserialize time: 0.005108118057251s
로그인 후 복사

생성자와 속성이 있는 클래스:

B clone time: 0.00072503089904785s
B new time: 0.0015559196472168s
B unserialize time: 0.0084571838378906s
로그인 후 복사

결론

빈 클래스의 테스트 결과에 따르면 new의 성능이 더 높습니다.

구성 방법과 속성이 포함된 클래스의 테스트 결과로 볼 때, 구성 매개변수가 포함된 새 클래스보다 클론의 성능이 훨씬 높습니다.

직렬화 성능은 여전히 ​​걱정스럽습니다. 사용할 수 없다면 사용하지 마세요.

그래서 클론을 사용해야 할 곳에 사용해야 하며 성능도 나쁘지 않습니다.

위 내용은 PHP에서 복제본과 신규의 성능 비교(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yurunsoft.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿