클론과 신규를 함께 비교하면 안 됩니다. 하지만 clone이나 new를 사용할 수 있는 몇 가지 시나리오가 있을 수 있는데, 이때 어떤 것을 선택해야 할까요?
저는 두 개의 테스트를 작성했습니다. 첫 번째는 빈 클래스를 선언하는 것이고, 두 번째는 생성자와 속성이 있는 클래스입니다. 또한 PHP 직렬화 테스트도 추가했습니다.
국제 연습에서는 코드를 직접 입력하면 한눈에 알 수 있습니다.
Code
<?php define('TEST_COUNT', 10000); function test($name, $callable) { $time = microtime(true); $callable(); echo $name, ' time: ', microtime(true) - $time, 's', PHP_EOL; } // 空的类 class A { } function test1() { echo '空的类:', PHP_EOL; $a = new A; test('A clone', function() use($a){ for($i = 0; $i < TEST_COUNT; ++$i) { $obj = clone $a; } }); test('A new', function(){ for($i = 0; $i < TEST_COUNT; ++$i) { $obj = new A; } }); $serialize = serialize($a); test('A unserialize', 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 '带构造方法、属性的类:', PHP_EOL; $constructData = [ 'id' => 1, 'name' => 'imi 框架牛逼', 'description' => 'IMI 是一款基于 Swoole 开发的协程 PHP 开发框架,拥有常驻内存、协程异步非阻塞IO等优点。', 'url' => 'https://www.imiphp.com', ]; $a = new B($constructData); test('B clone', function() use($a){ for($i = 0; $i < TEST_COUNT; ++$i) { $obj = clone $a; } }); test('B new', function() use($a){ for($i = 0; $i < TEST_COUNT; ++$i) { $obj = new B($a->data); } }); $serialize = serialize($a); test('B unserialize', 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!