Rumah > Artikel > pembangunan bahagian belakang > Ujian prestasi dan pengoptimuman mod tunggal dalam PHP
Pengujian prestasi dan pengoptimuman mod tunggal dalam PHP
Pengenalan:
Mod singleton ialah Corak reka bentuk biasa, iaitu digunakan untuk memastikan bahawa hanya satu contoh kelas boleh dijana. Dalam PHP, mod tunggal boleh membantu kami mengelak daripada membuat kelas beberapa kali, dengan itu meningkatkan prestasi program. Artikel ini akan memperkenalkan cara untuk menguji dan mengoptimumkan corak tunggal dalam PHP dan memberikan contoh kod khusus.
class Singleton { private static $instance; private function __construct() { // 私有构造函数,防止类外实例化 } public static function getInstance() { if (!self::$instance) { self::$instance = new self(); } return self::$instance; } // 其他方法 }
Dengan menjadikan pembina peribadi, kita boleh menghalang kelas daripada dijadikan instantiated secara luaran. Kaedah getInstance() bertanggungjawab untuk mendapatkan contoh unik kelas Singleton dan mewujudkannya apabila diperlukan. Setiap kali kaedah getInstance() dipanggil, objek contoh yang sama dikembalikan.
class Test { public function run() { $startTime = microtime(true); for ($i = 0; $i < 100000; $i++) { $singleton = Singleton::getInstance(); } $endTime = microtime(true); $executionTime = round($endTime - $startTime, 4); echo "执行100000次单例模式实例化耗时:{$executionTime} 秒 "; $startTime = microtime(true); for ($i = 0; $i < 100000; $i++) { $instance = new Singleton(); } $endTime = microtime(true); $executionTime = round($endTime - $startTime, 4); echo "执行100000次类实例化耗时:{$executionTime} 秒 "; } } $test = new Test(); $test->run();
Dalam kod di atas, kami menguji masa pelaksanaan untuk menginstant kelas melalui mod tunggal dan membuat instantiat kelas masing-masing. Keputusan pelaksanaan akan memberikan kita rujukan untuk menentukan sama ada untuk menggunakan mod tunggal untuk meningkatkan prestasi.
3.1 Instalasi malas
Dalam contoh di atas, kami menunggu sehingga kali pertama kami memanggil getInstance() Segerakan kelas Singleton. Pendekatan ini dipanggil instantiation malas. Ini mengelakkan instantiasi tidak sah, yang amat penting dalam projek besar.
3.2 Keselamatan berbilang benang
Apabila menggunakan mod tunggal dalam persekitaran berbilang benang, isu keselamatan benang perlu dipertimbangkan. Kami boleh menyelesaikan masalah ini dengan mengunci:
class Singleton { private static $instance; private static $lock; private function __construct() { // 私有构造函数,防止类外实例化 } public static function getInstance() { if (!self::$instance) { self::$lock = true; if (!self::$instance) { self::$instance = new self(); } self::$lock = false; } return self::$instance; } }
Dalam kod di atas, kami menambah pembolehubah statik $lock dan menggunakannya untuk memastikan bahawa apabila berbilang benang mengakses kaedah getInstance() pada masa yang sama, Hanya satu benang boleh melakukan operasi instantiasi.
Kesimpulan:
Mod tunggal boleh meningkatkan prestasi dalam kebanyakan kes, tetapi mungkin terdapat isu prestasi dalam beberapa kes khas. Kita perlu menjalankan ujian prestasi berdasarkan keadaan sebenar dan mengoptimumkan pelaksanaan corak tunggal. Dengan melengahkan instantiasi dan penguncian, kami boleh meningkatkan prestasi dan keselamatan benang bagi mod tunggal.
Rujukan:
Atas ialah kandungan terperinci Ujian prestasi dan pengoptimuman mod tunggal dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!