Rumah > pembangunan bahagian belakang > tutorial php > PHP Penanda Aras Prestasi Suntikan Ketergantungan

PHP Penanda Aras Prestasi Suntikan Ketergantungan

尊渡假赌尊渡假赌尊渡假赌
Lepaskan: 2025-02-20 12:23:14
asal
396 orang telah melayarinya

PHP Penanda Aras Prestasi Suntikan Ketergantungan

Takeaways Key

    Bekas Suntikan Ketergantungan (DIC) adalah alat utama untuk mengekalkan codebases dalam aplikasi dan rangka kerja PHP yang lebih besar, tetapi boleh memberi kesan kepada prestasi. Sebahagian daripada DIC yang terkenal untuk PHP termasuk php-di, simfonydependencyinjection, zenddi, ornodi, dadu, dan aura.di.
  • Prestasi DICS diukur dari segi masa pelaksanaan, penggunaan memori, dan bilangan fail yang disertakan. Metrik terakhir sangat penting kerana ia boleh menjejaskan berat keseluruhan aplikasi.
  • Di antara bekas yang diuji, dadu, aura, dan Orno adalah yang terpantas, dengan dadu menjadi yang paling cepat. PHP-Di, walaupun mempunyai ciri-ciri yang unik, mempunyai prestasi yang ketara. Symfony, sementara lebih sukar untuk mengkonfigurasi, dilakukan di pertengahan dan akan menjadi pilihan pilihan bagi mereka yang mencari bekas dari projek yang terkenal.
  • Walaupun perbezaan prestasi, pilihan DIC juga harus mempertimbangkan sintaks dan ciri konfigurasi. Perbezaan prestasi antara dadu, aura, dan orno boleh diabaikan untuk sebarang permohonan sebenar, oleh itu, pemaju harus memilih berdasarkan yang mereka lebih suka bekerja dengan.
Kebanyakan kerangka dan aplikasi PHP yang lebih besar menggunakan bekas suntikan ketergantungan dengan matlamat asas kod yang lebih banyak. Walau bagaimanapun, ini boleh memberi kesan kepada prestasi. Sebagai masa pemuatan penting, menjaga tapak cepat adalah penting seperti biasa. Hari ini saya akan menanda aras beberapa bekas suntikan pergantungan PHP untuk melihat prestasi relatif mereka.

Bagi mereka yang tidak dikenali dengan konsep ini, bekas suntikan ketergantungan adalah sekeping perisian yang secara automatik membina pokok objek. Sebagai contoh, pertimbangkan objek pengguna yang memerlukan contoh pangkalan data.

<span>$user = new User(new Database());</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
bekas suntikan ketergantungan boleh digunakan untuk membina pokok objek secara automatik tanpa perlu menyediakan parameter secara manual:

<span>$user = $container->get('User');</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Setiap kali ini dipanggil, objek pengguna akan dibuat dengan objek pangkalan data "disuntik".

Terdapat beberapa bekas terkenal (dan tidak begitu terkenal) yang tersedia untuk PHP:

  • php-di, container yang popular
  • SymfonyDependencyInjection, bekas suntikan ketergantungan yang disediakan oleh Rangka Kerja Symfony
  • zenddi bekas suntikan ketergantungan yang disediakan oleh Rangka Kerja Zend
  • ornodi, bekas yang kurang dikenali dengan ciri -ciri terhad tetapi dibangunkan dengan prestasi dalam fikiran
  • dadu, satu lagi bekas yang kurang dikenali dengan tumpuan untuk menjadi ringan. Pendedahan penuh, saya pengarang bekas ini, tetapi saya tidak akan sepenuhnya objektif sepenuhnya dalam analisis ini.
  • aura.di, bekas yang cukup popular dengan ciri -ciri minimum

perkataan pada jerawat: walaupun jerawat diiklankan sebagai bekas suntikan ketergantungan, mengambil objek dari bekas selalu mengembalikan contoh yang sama, yang menjadikan jerawat sebagai pencari perkhidmatan dan bukannya bekas suntikan ketergantungan dan tidak dapat diuji.

Walaupun semua bekas menyokong ciri -ciri yang berbeza, penanda aras ini akan meliputi fungsi asas yang diperlukan oleh bekas suntikan ketergantungan. Iaitu, mewujudkan objek dan suntikan kebergantungan di mana mereka diperlukan.

aspek suntikan ketergantungan yang mana akan diukur?

    Masa pelaksanaan
  1. Penggunaan memori
  2. Bilangan fail yang disertakan. Walaupun ini mempunyai sedikit kesan terhadap prestasi, ia merupakan penunjuk yang baik tentang bagaimana perpustakaan ringan dan mudah alih. Sekiranya anda perlu menghantar beratus -ratus fail dengan projek anda kerana pilihan DI anda, ia boleh memberi kesan besar kepada berat keseluruhan aplikasi anda sendiri.
Persekitaran ujian

Semua ujian dijalankan pada mesin yang sama yang menjalankan Arch Linux (3.15 kernel), Php 5.5.13 dan versi terkini setiap bekas pada 03/07/2014.

Semua nombor masa pelaksanaan yang dibentangkan adalah purata 10 larian selepas membuang mana -mana yang melebihi 20% lebih perlahan daripada yang terpantas.

ujian 1 - Buat contoh objek

Ujian ini menggunakan setiap bekas untuk membuat objek mudah 10,000 kali

tanpa bekas suntikan ketergantungan, ini akan ditulis sebagai:

kod ujian (pada github): aura, dadu, ornodi, php-di, symfonydependencyinjection, zenddi
<span>$user = new User(new Database());</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Seperti yang anda lihat, terdapat dua kem yang jelas di sini. Aura, dadu dan orno kira-kira sepuluh kali lebih cepat daripada php-di, symfony dan zenddi. PHP Penanda Aras Prestasi Suntikan Ketergantungan

Sama seperti masa pelaksanaan, terdapat dua kumpulan yang berbeza dengan simfoni yang duduk di suatu tempat di tengah -tengah.

PHP Penanda Aras Prestasi Suntikan Ketergantungan

Ini sangat menceritakan betapa ringannya setiap bekas dan pergi ke arah menjelaskan perbezaan penggunaan memori. Harus diingat bahawa banyak fail yang digunakan oleh Zenddi adalah fail kerangka biasa jadi jika anda menggunakan Rangka Kerja Zend, maka menggunakan Zenddi tidak akan menanggung overhead memori yang sama seperti fail mungkin akan digunakan semula di tempat lain dalam permohonan anda.

Begitu juga, php-di-di-sangat bergantung pada perpustakaan doktrin. Jika anda menggunakan doktrin dalam projek anda, maka overhead memori PHP-DI dikurangkan.

Walau bagaimanapun, adalah baik untuk melihat bahawa symfonydependencyInjection, walaupun menjadi sebahagian daripada rangka kerja stack adalah sepenuhnya berdiri sendiri dan berfungsi tanpa sebarang kebergantungan dari projek -projek simfoni lain.

aura, dadu dan orno tidak mempunyai sebarang kebergantungan luaran dan ini membantu mengekalkan jumlah fail mereka.

ujian 2 - mengabaikan autoloading

Sebagai fail pemuatan boleh memberi kesan kepada prestasi dan kedua-dua zend dan php-di memuatkan sejumlah besar fail, ujian yang sama telah dijalankan mengabaikan masa autoloader dengan terlebih dahulu membuat satu contoh kelas, memastikan mana-mana kelas yang diperlukan telah autoloaded sebelum mengukur masa.

Ini juga mungkin telah mencetuskan sebarang caching dalaman yang dilakukan oleh bekas tetapi rawatan yang sama digunakan untuk setiap bekas untuk memastikan ia adil

Kod PHP bersamaan:

kod ujian (pada github): aura, dadu, ornodi, php-di, symfonydependencyinjection, zenddi

<span>$user = new User(new Database());</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

PHP Penanda Aras Prestasi Suntikan Ketergantungan

Seperti yang dijangkakan, penggunaan memori tidak berubah dan prestasi sedikit lebih baik kerana masa autoloader tidak diukur. Walau bagaimanapun, ini menunjukkan bahawa PHP-DI, walaupun memuatkan 42 fail mempunyai kesan yang tidak dapat dielakkan ke atas jumlah masa pelaksanaan dan prestasi relatif tetap sama, memuatkan berpuluh-puluh fail bukanlah penyebab php-di dan zenddi yang mempunyai prestasi yang agak perlahan. PHP Penanda Aras Prestasi Suntikan Ketergantungan

Walaupun selepas mengabaikan overhead fail pemuatan, masih terdapat dua bola sepak yang berbeza di sini. Aura, Dice dan Orno sangat serupa dengan penggunaan prestasi dan memori manakala PHP-DI, Zend dan Symfony hanya bersaing antara satu sama lain.

PHP Penanda Aras Prestasi Suntikan Ketergantungan Semua ujian ke hadapan akan mengabaikan masa autoloading untuk memastikan ia benar -benar prestasi bekas yang sedang diukur.

ujian 3 - Graf Objek Deep

Ujian ini dilakukan dengan mempunyai bekas yang membina set objek ini 10,000 kali:

kod ujian (pada github): aura, dadu, ornodi, php-di, symfonydependencyinjection, zenddi

Nota: Seperti yang anda lihat dengan melihat kod ujian, Symfony, PHP-Di dan Aura memerlukan lebih banyak kod konfigurasi daripada bekas lain untuk melakukan ujian ini. Masa konfigurasi tidak termasuk dalam ujian.

<span>$user = $container->get('User');</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

PHP Penanda Aras Prestasi Suntikan Ketergantungan

Sekali lagi, terdapat sedikit perbezaan antara 3 teratas, dengan dadu 20% lebih cepat daripada aura dan 70% lebih cepat daripada Orno. Ketiga-tiga mereka jauh lebih cepat daripada Zend, PHP-DI dan Symfony. Perbezaan antara tiga bekas teratas sangat sedikit dalam istilah sebenar yang anda tidak akan dapat melihat perbezaan kelajuan di luar penanda aras buatan seperti ini.

zend, php-di dan ke tahap yang lebih rendah Symfony perlahan di sini. Zend mengambil masa 37 saat untuk melaksanakan tugas dadu di bawah 1 saat; Sudah tentu bukan perbezaan remeh. Sekali lagi, Symfony memimpin di antara bekas nama besar.

PHP Penanda Aras Prestasi Suntikan Ketergantungan

jumlah memori dan fail selaras dengan apa yang telah kita lihat dalam ujian lain. PHP Penanda Aras Prestasi Suntikan Ketergantungan

ujian 4 - mengambil perkhidmatan dari bekas

bekas juga perlu menyimpan dan mengambil perkhidmatan yang akan digunakan semula sepanjang permohonan. Ujian ini mengambil satu contoh dari bekas berulang kali.

bersamaan php tulen:

kod ujian (pada github): aura, dadu, ornodi, php-di, symfonydependencyinjection, zenddi

<span>$user = new User(new Database());</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Ini tidak dijangka berdasarkan hasil sebelumnya. Semua bekas kecuali Zend dan Symfony kira -kira sama dengan hanya 0.01s memisahkan hasil teratas 4. Symfony tidak jauh di belakang, tetapi Zend lebih dari sepuluh kali lebih perlahan daripada yang lain.

PHP Penanda Aras Prestasi Suntikan Ketergantungan

Penggunaan memori dan bilangan keputusan fail menjadi diramalkan dengan pembahagian yang sama antara bekas yang kita lihat dalam masa pelaksanaan sepanjang. PHP Penanda Aras Prestasi Suntikan Ketergantungan

ujian 5 - suntikan perkhidmatan

PHP Penanda Aras Prestasi Suntikan Ketergantungan Ujian akhir adalah untuk melihat seberapa cepat objek boleh dibina dan mempunyai perkhidmatan yang disuntik. Ini memerlukan format:

kod ujian (pada github): aura, dadu, ornodi, php-di, symfonydependencyinjection, zenddi

Menariknya, Aura telah memimpin sedikit dalam ujian ini. Walau bagaimanapun, ia bukanlah ujian seperti yang sama seperti Symfony dan Aura memerlukan beberapa baris konfigurasi eksplisit manakala bekas lain secara automatik menyelesaikan pergantungan. Masa yang diambil untuk mengkonfigurasi bekas bukan sebahagian daripada penanda aras.
<span>$user = $container->get('User');</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Mengejutkan, PHP-DI adalah yang paling lambat dalam tugas ini, dengan Zend mengambil kedudukannya di hadapan PHP-di dan Symfony buat kali pertama.

PHP Penanda Aras Prestasi Suntikan Ketergantungan

Kesimpulan

Pada prestasi sahaja, Dice, Aura dan Orno adalah semua pesaing yang kuat, Dice adalah terpantas secara keseluruhan dan aura terpantas dalam ujian akhir. Perbezaan antara kedua -dua kumpulan yang berbeza adalah jelas tetapi menarik untuk membandingkan ciri -ciri setiap bekas. Bilangan ciri dan prestasi tidak cukup berkaitan seperti yang anda harapkan. Kedua-dua php-di dan dadu mengandungi ciri-ciri yang unik tetapi php-di mengambil prestasi berat untuk melakukannya. Aura, walaupun pantas, memerlukan banyak konfigurasi manual dan, seperti yang anda harapkan, mempunyai ciri -ciri yang sangat minimum manakala Dice dan Orno mempunyai prestasi yang sangat serupa tetapi memerlukan banyak kod kurang untuk mengkonfigurasi.

Symfony sangat banyak di tengah -tengah dalam semua ujian, walaupun mengkonfigurasi, seperti dengan Aura, adalah tugas yang lebih sukar kerana tidak ada jenis sokongan parameter yang dibayangkan. Jika anda sedang mencari bekas dari projek yang terkenal, maka Symfony harus menjadi bekas pilihan jika prestasi penting.

yang mengatakan, jika prestasi murni adalah apa yang anda selepas itu dadu dan aura adalah pemenang yang jelas dengan Orno sangat dekat di belakang. Walau bagaimanapun, ia patut melihat sintaks konfigurasi dan ciri -ciri masing -masing untuk melihat yang anda lebih suka bekerja dengan perbezaan prestasi antara Dice, Aura dan Orno boleh diabaikan untuk sebarang aplikasi sebenar.

Semua kod untuk ujian boleh didapati di GitHub. Sila ambil perhatian: Repositori GitHub mengandungi salinan perpustakaan yang diuji dan bukannya menggunakan komposer untuk memasukkannya ke dalam projek, ini adalah untuk memastikan bahawa anda boleh menjalankan kod dengan versi yang tepat yang saya uji dan mendapatkan hasil yang sama. >

Soalan Lazim (Soalan Lazim) mengenai Penanda Aras Prestasi Suntikan Ketergantungan PHP Apakah kepentingan penanda aras Prestasi Suntikan Ketergantungan PHP? Penanda aras ini memberikan analisis perbandingan pelbagai bekas, membantu pemaju membuat keputusan yang tepat mengenai bekas yang digunakan berdasarkan keperluan khusus mereka. Mereka menawarkan pandangan tentang prestasi setiap bekas dari segi penggunaan memori dan penggunaan masa, yang merupakan faktor kritikal dalam mengoptimumkan prestasi aplikasi PHP. > Suntikan Ketergantungan (DI) dalam PHP meningkatkan kualiti kod dengan mempromosikan gandingan longgar, meningkatkan kebolehlihatan, dan meningkatkan kebolehgunaan semula kod. Dengan menyuntik kebergantungan, komponen menjadi lebih bebas, menjadikan kod lebih mudah untuk diubah suai dan diuji. Ia juga menggalakkan prinsip tanggungjawab tunggal kerana setiap kelas hanya melakukan apa yang sepatutnya dilakukan, yang membawa kepada kod yang lebih bersih dan lebih diselenggara.

Apakah jenis suntikan ketergantungan yang berlainan dalam php?

Terdapat tiga jenis suntikan ketergantungan utama dalam PHP: suntikan pembina, suntikan setter, dan suntikan antara muka. Suntikan pembina adalah di mana kebergantungan disediakan melalui pembina kelas. Suntikan setter melibatkan menyediakan kebergantungan melalui kaedah. Suntikan antara muka memerlukan kelas bergantung untuk melaksanakan antara muka yang akan menyuntik kebergantungan. Bekas, menguruskan instantiasi dan konfigurasi perkhidmatan atau objek dalam aplikasi. Ia bertindak sebagai kilang yang bertanggungjawab untuk mewujudkan dan mengembalikan contoh kebergantungan. Ia juga menguruskan contoh yang dikongsi, memastikan bahawa satu contoh dikembalikan setiap kali perkhidmatan bersama diminta. Bekas, pertimbangkan faktor seperti kemudahan penggunaan, prestasi, sokongan komuniti, dan keserasian dengan projek anda. Prestasi sangat penting, dan ini adalah di mana penanda aras prestasi suntikan PHP kebergantungan berguna. Mereka memberikan analisis perbandingan prestasi pelbagai bekas, membantu anda membuat keputusan yang tepat. Ketergantungan kelas. Ini membolehkan kebergantungan dihina atau ditangkap semasa ujian, membolehkan anda menguji kelas secara berasingan. Ia juga memudahkan untuk menulis ujian unit, kerana anda boleh menyuntik kebergantungan mengejek yang memberikan respons yang boleh diramal, menjadikan ujian anda lebih dipercayai dan mudah ditulis.

Ya, suntikan ketergantungan boleh digunakan dalam mana -mana projek PHP, tanpa mengira saiz atau kerumitannya. Ini adalah corak reka bentuk yang menggalakkan kebolehgunaan semula kod, modulariti, dan kesesuaian, menjadikannya alat yang berharga bagi mana -mana pemaju PHP. Boleh memperkenalkan sedikit overhead disebabkan oleh lapisan abstraksi tambahan, kesan terhadap prestasi aplikasi umumnya boleh diabaikan. Manfaat kualiti kod, kesesuaian, dan kebolehkerjaan yang lebih baik sering melebihi kos prestasi kecil.

Bagaimanakah suntikan ketergantungan berkaitan dengan prinsip -prinsip pepejal dalam PHP? Dip menyatakan bahawa modul peringkat tinggi tidak boleh bergantung kepada modul peringkat rendah, tetapi kedua-duanya harus bergantung kepada abstraksi. Suntikan ketergantungan membolehkan ini dengan membolehkan anda menyuntik kebergantungan sebagai antara muka atau kelas abstrak, bukannya kelas konkrit. Kemungkinan untuk menggunakan bekas suntikan kebergantungan dalam satu projek PHP, ia biasanya tidak disyorkan. Menggunakan pelbagai bekas boleh membawa kepada kod yang lebih sukar untuk dikendalikan dan difahami. Biasanya lebih baik memilih satu bekas yang paling sesuai dengan keperluan projek anda dan melekat dengannya.

Atas ialah kandungan terperinci PHP Penanda Aras Prestasi Suntikan Ketergantungan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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