Ujian prestasi dan pengoptimuman mod tunggal dalam PHP

PHPz
Lepaskan: 2023-10-15 10:56:01
asal
883 orang telah melayarinya

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.

  1. Pengenalan kepada Singleton Pattern
    Corak singleton ialah corak reka bentuk ciptaan adalah untuk memastikan kelas hanya mempunyai satu contoh dan menyediakan akses global kepada titik itu . Dalam PHP, kita boleh melaksanakan corak tunggal dengan:
class Singleton
{
    private static $instance;

    private function __construct()
    {
        // 私有构造函数,防止类外实例化
    }

    public static function getInstance()
    {
        if (!self::$instance) {
            self::$instance = new self();
        }

        return self::$instance;
    }

    // 其他方法
}
Salin selepas log masuk

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.

  1. Ujian Prestasi
    Sebelum menggunakan corak tunggal, kita perlu menguji sama ada prestasinya benar-benar lebih baik daripada membuat seketika kelas. Berikut ialah contoh ujian prestasi mudah:
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();
Salin selepas log masuk

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.

  1. Pengoptimuman Prestasi
    Walaupun mod tunggal boleh meningkatkan prestasi dalam beberapa kes, masalah prestasi mungkin berlaku dalam beberapa kes khas. Berikut ialah beberapa cadangan untuk membantu kami mengoptimumkan prestasi corak tunggal:

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;
    }
}
Salin selepas log masuk

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:

  • Corak Reka Bentuk: Elemen Perisian Berorientasikan Objek Boleh Digunakan Semula oleh Erich Gamma, Richard Helm, Ralph Johnson dan John Vlissides.#🎜🎜
  • Corak Reka Bentuk PHP oleh Stephan Schmidt.
Di atas adalah pengenalan kepada ujian prestasi dan pengoptimuman mod tunggal dalam PHP.

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!