Artikel ini berbicara tentang alat yang mudah digunakan untuk membandingkan sesi untuk profiling kode PHP, yang memungkinkan untuk dengan cepat menemukan kemacetan dalam proyek pada Bitrix CMS.
Dari jauh
Pada bulan Juli, Bitrix diperbarui ke versi terbaru pada waktu itu ... Dan kecepatan pemuatan halaman menurun: suatu tempat sebesar 20%, suatu tempat sebesar 300 +%. Terutama pada tahap pemesanan pelanggan.
Jumlahnya mengesankan dan menyedihkan. Mengapa diperbarui?

Yaitu ada risiko bahwa jika kami tidak memperbarui, kami harus menyelesaikan dua masalah sekaligus: benar-benar memperbarui Bitrix dan memperbarui basis kode kami ke PHP> 7.1.
Alasan untuk rem
Alasan untuk rem terbesar, ternyata, adalah logika kode baru untuk bekerja dengan profil pengiriman. Menurut kode, mereka melakukannya dengan lebih benar, atau sesuatu: pengiriman muncul sebagai entitas terpisah. Sekarang pesanan dapat dikirim dalam beberapa pengiriman (dengan karakteristiknya sendiri dalam hal biaya, metode pengiriman dan komposisi barang).
Namun, sekarang profil pengiriman adalah entri terpisah dalam database dengan keterbatasannya dari kernel Bitrix, yang akan muncul setiap kali Anda perlu memeriksa kemungkinan menampilkan profil ini ketika melakukan pemesanan.
Secara umum, artikel ini tidak akan fokus pada apa yang sebenarnya diperbaiki untuk mengatasi rem, tetapi pada alat yang memungkinkan untuk dengan cepat menemukan kemacetan dalam kode dan memperbaikinya.
Admin XHProf
Yang kami miliki adalah profiler populer dari Facebook - XHProf. Kerugian yang menghambat pengoperasian alat terkait dengan GUI-nya:
- Kurangnya navigasi yang jelas antara sesi pembuatan profil
- Ketidakmampuan untuk membandingkan lebih dari dua sesi secara bersamaan di luar namespace yang sama.
- Anda tidak dapat membuat komentar pada mereka dalam daftar sesi. Setelah sesi kesepuluh, Anda sudah lupa perubahan apa yang terkait dengan hasil profil sebelumnya.
Akibatnya, melihat SUMBER GUI XHProf asli, dan, sedikit ngeri, GUI baru ditulis untuknya, mencakup kerugian yang tercantum.
Instalasi
→ Tautan ke proyek
Saya tidak akan menjelaskan cara menginstal XHProf dan profil, setidaknya ada beberapa tutorial yang baik tentang Habré.
Untuk menginstal XHProf Admin, letakkan folder xhprof_admin di folder xhprof_html dari XHProf asli. Atau mengkloning seluruh proyek (sudah mengandung XHProf dan GUI baru).
Kemudian buka halaman <Path to xhprof> / xhprof_html / xhprof_admin /
Jika pemetaan diaktifkan, seperti yang direkomendasikan dalam dokumentasi, Anda perlu membuka <Path to xhprof> / xhprof_admin /
Halaman rumah

Berisi:
- Daftar semua sesi pembuatan profil yang diurutkan berdasarkan tanggal
- Bidang Komentar Sesi
- Gagak yang dengannya Anda dapat memilih sesi untuk dihapus, dibandingkan, dikumpulkan
- Tautkan ke laporan baru
- Tautan ke laporan dan kaligrafi asli
- Bidang Berat Sesi untuk Diff dan Agregat
- Bidang yang menentukan urutan sesi akan ditampilkan dalam mode Bandingkan dan juga dalam mode Diff
- Tombol:
- Bandingkan - bandingkan sesi yang dipilih (laporan baru)
- Diff - laporan standar untuk membandingkan sesi dalam satu ruang nama
- Agregat - laporan standar dengan agregasi sesi dalam satu ruang nama
- Simpan komentar khusus - menyimpan komentar untuk sesi (dalam file terpisah)
- Hapus proses yang dipilih - menghapus file sesi dan file komentar
- Tautan ke halaman daftar sesi asli
Lihat laporan asli, Diff berjalan, Agregat berjalan, Lihat callgraph - fitur asli XHProf GUI - Saya tidak akan menjelaskannya. Saya hanya bisa mengatakan bahwa Admin XHProf memungkinkan Anda untuk menavigasi dengan mudah, daripada menyusun tautan secara manual.
Bandingkan lari

Laporan baru yang memungkinkan Anda untuk dengan cepat mengevaluasi pertumbuhan atau regresi dalam produktivitas.
Untuk menggunakannya, di halaman utama:
- Pilih sesi yang ingin kita bandingkan.
- Kami menetapkan bidang semacam "Urutkan" untuk menentukan urutan sesi yang ditampilkan: semakin kecil nilai bidang, semakin awal sesi akan ditampilkan. Sesi pertama akan diambil sebagai sesi pertama - semua sesi berikutnya akan dibandingkan dengannya.
- Jika kami ingin menampilkan nilai rata-rata metrik, maka tandai "tampilkan rata-rata".
- Klik "Bandingkan."

Laporan tidak menunjukkan% bahwa fungsi “menempati” untuk setiap metrik agar tidak mengacaukan halaman, tetapi menampilkan nilai absolut. Jika ada perbedaan lebih dari 1% dalam metrik untuk fungsi yang diprofilkan antara sesi dasar dan yang berikutnya, ini jelas ditunjukkan: hijau menunjukkan peningkatan, merah menunjukkan regresi.
Secara default:
- Laporan ini menampilkan 100 fungsi pertama. Jika Anda membutuhkan lebih banyak, klik "tampilkan semua".
- Data diurutkan berdasarkan “Incl. Waktu Dinding (microsec) ”, tetapi Anda dapat mengeklik pada metrik apa saja dan mengurutkannya.
Untuk mengecualikan sesi dari laporan, klik "kecualikan".
Penyortiran menurut setiap metrik tersedia - cukup klik pada tajuk kolom.
Untuk menampilkan nilai rata-rata untuk semua sesi yang dipilih, klik "Tampilkan nilai rata-rata".
Untuk menelusuri fungsi, Anda dapat mengklik sel di persimpangan fungsi dan metrik dengan sesi yang ditampilkan.

Contoh penggunaan
- Kami memulai profiler pada kode sumber. Kami membuka daftar sesi dan menambahkan komentar.
- Kami memulai profiler pada kode yang ditingkatkan. Juga menambahkan komentar.
- Apakah item 2 beberapa kali.
- Kemudian kami membuka daftar sesi pembuatan profil, memilih semua sesi secara berurutan dan mengklik Bandingkan.
- Kami melihat perubahannya.
- Mereka memutuskan apa lagi untuk mempercepat.
XHProf Admin mudah digunakan untuk mengidentifikasi fungsi-fungsi berat yang biasa digunakan yang dilakukan oleh satu pengguna. Misalnya, dalam Bitrix, ketika melakukan pemesanan ketika berpindah dari satu tahap ke tahap lain (pengiriman, pembayaran, kontak, dll.) Setiap kali sejumlah fungsi dipanggil untuk mengontrol integritas keranjang, dll. Tahap-tahap ini diprofilkan secara terpisah dan kemudian ditampilkan bersama dalam laporan Bandingkan. Hasil dari fungsi-fungsi ini dapat di-cache, secara signifikan mempercepat waktu transisi dari tahap ke tahap.
Ringkasan
Sebagai hasilnya, kami menaikkan penurunan kecepatan pada tahap penempatan pesanan saat memperbarui Bitrix, secara bersamaan menganalisis bagian lain dari situs dan mempercepatnya.
Dari waktu ke waktu kami menggunakan Admin XHProf pada proyek-proyek sebagai GUI yang lebih intuitif.
Tautan dokumentasi ke Admin XHProf: buka
Siapa yang tertarik dengan topik optimasi kode dan alat untuk ini, tulis di komentar.