Rumah >pembangunan bahagian belakang >tutorial php >Pengoptimuman prestasi peringkat PHP dengan Blackfire

Pengoptimuman prestasi peringkat PHP dengan Blackfire

Joseph Gordon-Levitt
Joseph Gordon-Levittasal
2025-02-08 08:59:10803semak imbas

Blackfire: menunjuk dan menetapkan kesesakan prestasi di aplikasi rumah anda yang lebih baik

PHP-level Performance Optimization with Blackfire

Wawasan Utama:

    Blackfire adalah alat yang berkuasa untuk mengenal pasti dan menyelesaikan kesesakan prestasi dalam aplikasi, terutama yang dibina dengan Homestead bertambah baik.
  • Memahami graf Blackfire (profil rujukan, masa eksklusif, masa inklusif, laluan panas) adalah penting untuk menunjuk longkang prestasi - sama ada penggunaan memori yang berlebihan, masa CPU, atau aktiviti keseluruhan.
  • Artikel ini mempamerkan aplikasi Blackfire dalam mengoptimumkan blog galeri multi-imej. Ia menyoroti pengenalpastian kesesakan (mis., PDOExecute) dan pelaksanaan penyelesaian (mis., Pagination) untuk meningkatkan prestasi.
  • Ujian prestasi berterusan dengan Blackfire adalah penting sepanjang kitaran hayat aplikasi. Mengintegrasikan ujian ini ke dalam saluran paip CI/CD anda (ciri yang ditawarkan oleh pelan premium Blackfire) meningkatkan kecekapan.

(artikel ini adalah sebahagian daripada siri untuk membina aplikasi blog multi-imej Galeri untuk penandaarasan dan pengoptimuman prestasi. Akses repositori di sini.)

Jawatan ini dibina atas perkenalan sebelumnya kepada Blackfire, menunjukkan aplikasi praktikalnya dalam mengenal pasti dan menyelesaikan masalah prestasi. Kami akan menggunakannya untuk menganalisis projek sampel kami, kawasan penargetan untuk peningkatan segera. Jika anda menggunakan Homestead bertambah baik (yang disyorkan), Blackfire harus ditubuhkan. Tiada pengetahuan Blackfire sebelum ini diperlukan.

Memahami Blackfire Metrics:

Sebelum kita mula, mari kita tentukan istilah utama yang digunakan dalam graf prestasi Blackfire:

  • Profil rujukan: Baseline prestasi awal aplikasi anda. Profil berikutnya dibandingkan dengan garis dasar ini untuk mengukur penambahbaikan.
  • Masa eksklusif: Masa yang dibelanjakan semata -mata dalam fungsi/kaedah tertentu, tidak termasuk masa yang dibelanjakan dalam fungsi yang dipanggil.
  • Masa termasuk: Jumlah masa yang dihabiskan untuk melaksanakan fungsi, termasuk masa yang dibelanjakan dalam semua fungsi yang dipanggilnya.
  • Laluan Panas: Bahagian yang paling aktif dari aplikasi anda semasa profil, sering menunjukkan kawasan penggunaan sumber yang tinggi (memori atau CPU).

Menyediakan Blackfire:

    Buat akaun Blackfire. Halaman akaun anda menyediakan token dan ID yang diperlukan untuk mengkonfigurasi
  1. . Fail ini mengandungi ruang letak di bahagian bawah: Homestead.yaml
<code class="language-yaml"># blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar</code>
Uncomment garis -garis ini dan gantikan nilai letak dengan butiran akaun anda.

  1. Pasang pelanjutan Chrome Blackfire. Pelanjutan ini digunakan terutamanya untuk profil manual, yang biasa dalam kebanyakan senario. Integrasi lain tersedia (lihat senarai penuh di sini).

Mengoptimumkan dengan Blackfire: Kajian Kes

Kami akan menanda aras laman utama - halaman kritikal untuk mana -mana laman web. Masa pemuatan perlahan di sini secara langsung memberi kesan kepada pengalaman pengguna dan kadar lantunan. Walaupun halaman lain (mis., Muat naik imej) boleh diuji, prestasi membaca secara amnya diprioritaskan melalui prestasi menulis.

Aplikasi awal kami memuatkan dan menyusun semua galeri mengikut umur. Untuk profil, buka laman utama, klik butang Sambungan Blackfire, dan pilih "Profil!".

Hasil Profil Awal:

Grafik mendedahkan bahawa PDOExecute menggunakan 100% masa inklusif (bahagian merah jambu gelap), menunjukkan ia adalah hambatan utama. Walaupun kaedah lain mungkin menunjukkan bar merah jambu cahaya yang lebih besar (masa inklusif), ini mewakili masa kumulatif fungsi bergantung. Bahagian merah jambu gelap mewakili fungsi yang memerlukan perhatian segera.

Beralih ke mod RAM menunjukkan bahawa rendering ranting menggunakan majoriti (kira -kira 40MB) RAM. Ini diharapkan diberikan sejumlah besar data yang diberikan.

PHP-level Performance Optimization with Blackfire

Laluan panas (sempadan tebal) dengan jelas menyerlahkan kesesakan. Nod yang intensif (nod dengan masa yang tinggi dibelanjakan) juga boleh menunjukkan masalah, walaupun tidak langsung sebahagian dari jalan panas.

Analisis

mendedahkan bahawa

dan PDOExecute (penggunaan RAM tinggi) disebabkan oleh memuat semua galeri di laman utama. Penyelesaian: Melaksanakan penomboran. unserialize

Melaksanakan Pagination:

  1. tambah

    malar ke PER_PAGE, menetapkannya kepada nilai seperti 12. HomeController

  2. Ubah suai prosedur pengambilan galeri untuk menggunakan penomboran:

<code class="language-yaml"># blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar</code>
    Tambahkan JavaScript ke paparan rumah untuk memuatkan malas:
<code class="language-php">$galleries = $this->em->getRepository(Gallery::class)->findBy([], ['createdAt' => 'DESC'], self::PER_PAGE);</code>
    tambahkan kaedah baru untuk
  1. untuk galeri pemuatan malas: HomeController
<code class="language-html+php">{% block javascripts %}
    {{ parent() }}

    
{% endblock %}</code>

Perbandingan prestasi:

Melancarkan profiler selepas melaksanakan penomboran menghasilkan penambahbaikan yang ketara:

Penggunaan memori dikurangkan sepuluh kali ganda, dan pemuatan hampir seketika. Kesesakan baru adalah DebugClass, akibat dari persekitaran pembangunan. Beralih ke mod pengeluaran terus meningkatkan prestasi:

Kesimpulan:

Prestasi aplikasi meningkat secara dramatik, dengan masa beban halaman turun hingga 58ms. Pengoptimuman lanjut adalah minimum. Ujian prestasi biasa dengan Blackfire adalah penting, dan mengintegrasikannya ke dalam saluran paip CI/CD anda (tersedia dengan pelan premium Blackfire) sangat disyorkan.

Soalan Lazim (Soalan Lazim) mengenai Pengoptimuman Prestasi PHP:

Seksyen FAQ yang disediakan masih tidak berubah, kerana ia menawarkan maklumat berharga yang berkaitan dengan pengoptimuman prestasi PHP secara umum. Ia meliputi topik seperti alat pemantauan, isu biasa, teknik pengoptimuman, skalabiliti, dan amalan terbaik.

Atas ialah kandungan terperinci Pengoptimuman prestasi peringkat PHP dengan Blackfire. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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