Leistungsvergleich von Klon und Neu in PHP (Codebeispiel)

藏色散人
Freigeben: 2023-04-06 13:36:02
nach vorne
3964 Leute haben es durchsucht

Klon und Neu sollten nicht miteinander verglichen werden. Aber es kann einige Szenarien geben, in denen Klon oder Neu verwendet werden können. Welches sollten wir also zu diesem Zeitpunkt wählen?

Ich habe zwei Tests geschrieben, der erste besteht darin, eine leere Klasse zu deklarieren, und der zweite ist eine Klasse mit Konstruktoren und Attributen. Darüber hinaus habe ich PHP-Serialisierungstests hinzugefügt.

Internationale Praxis, geben Sie den Code direkt ein, es ist auf einen Blick klar.

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();
Nach dem Login kopieren

Laufergebnis

Leere Klasse:

A clone time: 0.0015249252319336s
A new time: 0.00090503692626953s
A unserialize time: 0.005108118057251s
Nach dem Login kopieren

Klasse mit Konstruktor und Attributen:

B clone time: 0.00072503089904785s
B new time: 0.0015559196472168s
B unserialize time: 0.0084571838378906s
Nach dem Login kopieren

Fazit

Nach den Testergebnissen der leeren Klasse zu urteilen, hat Neu eine höhere Leistung.

Nach den Testergebnissen von Klassen mit Konstruktionsmethoden und -attributen zu urteilen, ist die Leistung von Klonen viel höher als die von Neu mit Konstruktionsparametern.

Serialisierung hat wie immer eine schlechte Leistung, also verwenden Sie sie nicht, wenn Sie sie nicht verwenden können.

Also sollten wir Klonen verwenden, wo wir sollten, und die Leistung ist nicht schlecht.

Das obige ist der detaillierte Inhalt vonLeistungsvergleich von Klon und Neu in PHP (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yurunsoft.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage