PHP でのクローンと新規のパフォーマンス比較 (コード例)

藏色散人
リリース: 2023-04-06 13:36:02
転載
3963 人が閲覧しました

Clone と new は機能が異なるため、一緒に比較しないでください。ただし、クローンまたは新規を使用できるシナリオがいくつかある可能性があるため、現時点ではどちらを選択する必要がありますか?

私は 2 つのテストを作成しました。1 つ目は空のクラスを宣言するもので、2 つ目はコンストラクターと属性を持つクラスを宣言するものです。さらに、PHP シリアル化テストも追加しました。

国際的な慣例、コードを直接入力すると、一目瞭然です。

コード

<?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 の方が性能が高いです。

構築メソッドと属性を備えたクラスのテスト結果から判断すると、クローンのパフォーマンスは、構築パラメータを備えた新規クラスのパフォーマンスよりもはるかに高くなっています。

シリアル化のパフォーマンスは相変わらず気になるので、使えない場合は使わないでください。

だから、cloneを使うべきところはcloneを使えばいいし、パフォーマンスも悪くない。

以上がPHP でのクローンと新規のパフォーマンス比較 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yurunsoft.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート