Performa runtime adalah performa halaman Anda saat dijalankan, bukan saat dimuat. Tutorial ini mengajarkan cara menggunakan panel Performa Chrome DevTools untuk menganalisis performa runtime. Dalam model RAIL, keterampilan yang Anda pelajari dalam tutorial ini berguna untuk menganalisis fase Respons, Animasi, dan Tidak Ada Aktivitas di halaman Anda.
Mulai
Dalam tutorial ini, Anda akan membuka DevTools di halaman aktif dan menggunakan panel Performa untuk menemukan bottleneck performa di halaman.
- Buka Google Chrome dalam Mode Samaran. Mode Samaran memastikan Chrome berjalan dalam keadaan yang bersih. Misalnya, jika Anda menginstal banyak ekstensi, ekstensi tersebut dapat menimbulkan derau dalam pengukuran performa Anda.
Muat halaman berikut di jendela Samaran Anda. Ini adalah demo yang akan Anda buat profil. Halaman tersebut menampilkan sekumpulan kotak biru kecil yang bergerak ke atas dan ke bawah.
https://googlechrome.github.io/devtools-samples/jank/
Tekan Command+Option+I (Mac) atau Control+Shift+I (Windows, Linux) untuk membuka DevTools.
Gambar 1. Demo di sebelah kiri, dan DevTools di sebelah kanan
Menyimulasikan CPU seluler
Perangkat seluler memiliki daya CPU yang jauh lebih sedikit daripada desktop dan laptop. Setiap kali Anda membuat profil halaman, gunakan Throttling CPU untuk menyimulasikan performa halaman di perangkat seluler.
- Di DevTools, klik tab Performa.
- Pastikan kotak centang Screenshots diaktifkan.
- Klik Setelan Screenshot . DevTools menampilkan setelan yang terkait dengan cara merekam metrik performa.
Untuk CPU, pilih 2x lebih lambat. DevTools men-throttle CPU sehingga proses ini 2 kali lebih lambat dari biasanya.
Gambar 2. Throttling CPU, digarisbawahi dengan warna biru
Menyiapkan demo
Sulit untuk membuat demo performa runtime yang berfungsi secara konsisten untuk semua pembaca situs ini. Bagian ini memungkinkan Anda menyesuaikan demo untuk memastikan pengalaman Anda relatif konsisten dengan screenshot dan deskripsi yang terlihat dalam tutorial ini, terlepas dari penyiapan khusus Anda.
- Terus klik Add 10 sampai kotak biru bergerak lebih lambat dari sebelumnya. Pada komputer kelas atas, mungkin perlu waktu sekitar 20 klik.
Klik Optimize. Kotak biru akan bergerak lebih cepat dan lebih lancar.
Klik Batalkan Pengoptimalan. Kotak biru bergerak lebih lambat dan dengan lebih banyak jank lagi.
Mencatat performa runtime
Saat Anda menjalankan versi halaman yang dioptimalkan, kotak biru akan bergerak lebih cepat. Mengapa demikian? Kedua versi seharusnya memindahkan setiap persegi dengan jumlah ruang yang sama dalam waktu yang sama. Lakukan rekaman di panel Performa untuk mempelajari cara mendeteksi bottleneck performa pada versi yang tidak dioptimalkan.
Di DevTools, klik Record . DevTools merekam metrik performa saat halaman berjalan.
Gambar 3: Membuat profil halaman
Tunggu beberapa detik.
Klik Stop. DevTools berhenti merekam, memproses data, lalu menampilkan hasilnya di panel Performa.
Gambar 4: Hasil profil
Wow, itu jumlah data yang sangat banyak. Jangan khawatir, semuanya akan Anda mengerti.
Menganalisis hasil
Setelah mendapatkan rekaman performa halaman, Anda dapat mengukur seberapa buruk performa halaman tersebut dan menemukan penyebabnya.
Menganalisis frame per detik
Metrik utama untuk mengukur performa animasi adalah frame per detik (FPS). Pengguna akan senang jika animasi berjalan pada kecepatan 60 FPS.
Lihat diagram FPS. Setiap kali Anda melihat batang merah di atas FPS, artinya kecepatan frame turun sangat rendah sehingga mungkin mengganggu pengalaman pengguna. Secara umum, makin tinggi panel hijau, semakin tinggi FPS.
Gambar 5: Diagram FPS, digarisbawahi dengan warna biru
Di bawah diagram FPS, Anda akan melihat diagram CPU. Warna dalam diagram CPU sesuai dengan warna di tab Summary, di bagian bawah panel Performance. Fakta bahwa diagram CPU penuh warna berarti CPU telah mencapai performa maksimal selama perekaman. Setiap kali Anda melihat CPU mencapai batas maksimum untuk jangka waktu yang lama, itu adalah isyarat untuk menemukan cara untuk melakukan lebih sedikit pekerjaan.
Gambar 6: Diagram CPU dan tab Ringkasan, digarisbawahi dengan warna biru
Arahkan mouse ke diagram FPS, CPU, atau NET. DevTools akan menampilkan screenshot halaman pada saat itu. Gerakkan mouse ke kiri dan ke kanan untuk memutar ulang rekaman. Langkah ini disebut scrubbing, dan berguna untuk menganalisis perkembangan animasi secara manual.
Gambar 7: Menampilkan screenshot halaman sekitar tanda 2.000 md rekaman
Di bagian Frame, arahkan kursor mouse ke salah satu kotak hijau. DevTools akan menampilkan FPS untuk frame tertentu tersebut. Setiap frame mungkin jauh di bawah target 60 FPS.
Gambar 8: Mengarahkan kursor ke atas bingkai
Tentu saja, dengan demo ini, cukup jelas bahwa performa halaman tersebut kurang baik. Namun, dalam skenario nyata, hal ini mungkin tidak terlalu jelas. Jadi, memiliki semua alat ini untuk melakukan pengukuran akan sangat berguna.
Bonus: Buka pengukur FPS
Alat praktis lainnya adalah FPS meter, yang memberikan perkiraan waktu nyata untuk FPS saat halaman berjalan.
- Tekan Command+Shift+P (Mac) atau Control+Shift+P (Windows, Linux) untuk membuka Menu Command.
- Mulai ketik
Rendering
di Menu Perintah dan pilih Show Rendering. Di tab Rendering, aktifkan FPS Meter. Overlay baru akan muncul di kanan atas area pandang Anda.
Gambar 9: FPS meter
Nonaktifkan FPS Meter lalu tekan Escape untuk menutup tab Rendering. Anda tidak akan menggunakannya dalam tutorial ini.
Menemukan bottleneck
Setelah Anda mengukur dan memverifikasi bahwa animasi tidak berperforma baik, pertanyaan berikutnya yang harus dijawab adalah: mengapa?
Perhatikan tab ringkasan. Jika tidak ada peristiwa yang dipilih, tab ini akan menampilkan pengelompokan aktivitas. Halaman menghabiskan sebagian besar waktunya untuk rendering. Karena performa adalah seni melakukan pekerjaan yang lebih sedikit, tujuan Anda adalah mengurangi jumlah waktu yang dihabiskan untuk melakukan pekerjaan rendering.
Gambar 10: Tab Ringkasan, digarisbawahi dengan warna biru
Luaskan bagian Utama. DevTools menampilkan flame chart aktivitas pada thread utama dari waktu ke waktu. Sumbu x mewakili rekaman, dari waktu ke waktu. Setiap batang merepresentasikan sebuah peristiwa. Batang yang lebih lebar berarti peristiwa memerlukan waktu lebih lama. Sumbu y mewakili stack panggilan. Jika Anda melihat peristiwa ditumpuk di atas satu sama lain, artinya peristiwa yang lebih tinggi menyebabkan peristiwa yang lebih rendah.
Gambar 11: Bagian Utama, digarisbawahi dengan warna biru
Ada banyak data dalam rekaman. Perbesar satu peristiwa Animation Frame Fired dengan mengklik, menahan, dan menarik mouse ke Overview, yang merupakan bagian yang mencakup diagram FPS, CPU, dan NET. Bagian Utama dan tab Ringkasan hanya menampilkan informasi untuk bagian rekaman yang dipilih.
Gambar 12: Memperbesar satu peristiwa Frame Animasi Diaktifkan
Perhatikan segitiga merah di kanan atas peristiwa Animation Frame Fired. Setiap kali Anda melihat segitiga merah, merupakan peringatan bahwa mungkin ada masalah terkait peristiwa ini.
Klik peristiwa Animation Frame Fired. Sekarang tab Ringkasan menampilkan informasi tentang peristiwa tersebut. Perhatikan link menampilkan. Mengklik tindakan tersebut akan menyebabkan DevTools menandai peristiwa yang memulai peristiwa Animation Frame Fired. Perhatikan juga link app.js:94. Jika diklik, Anda akan diarahkan ke baris yang relevan dalam kode sumber.
Gambar 13: Informasi selengkapnya tentang peristiwa Animation Frame Fired
Di bawah peristiwa app.update, ada sekumpulan peristiwa ungu. Jika lebih lebar, tampak seolah-olah setiap persegi memiliki segitiga merah. Klik salah satu peristiwa Tata Letak berwarna ungu sekarang. DevTools menyediakan informasi selengkapnya tentang peristiwa tersebut di tab Summary. Selain itu, ada peringatan tentang reflow paksa (kata lain untuk tata letak).
Di tab Summary, klik link app.js:70 di bagian Layout Forced. DevTools akan mengarahkan Anda ke baris kode yang memaksa tata letak.
Gambar 13: Baris kode yang menyebabkan tata letak paksa
Fiuh! Banyak hal yang harus dipahami, tetapi sekarang Anda memiliki dasar yang kuat dalam alur kerja dasar untuk menganalisis performa runtime. Bagus sekali.
Bonus: Menganalisis versi yang dioptimalkan
Dengan menggunakan alur kerja dan alat yang baru saja Anda pelajari, klik Optimize pada demo untuk mengaktifkan kode yang dioptimalkan, melakukan perekaman performa lainnya, lalu menganalisis hasilnya. Dari peningkatan kecepatan frame hingga pengurangan peristiwa di flame chart bagian Main, Anda dapat melihat bahwa versi aplikasi yang dioptimalkan melakukan lebih sedikit pekerjaan, sehingga menghasilkan performa yang lebih baik.
Langkah berikutnya
Fondasi untuk memahami performa adalah model RAIL. Model ini mengajarkan metrik performa yang paling penting bagi pengguna. Lihat Mengukur Performa dengan Model RAIL untuk mempelajari lebih lanjut.
Agar lebih nyaman dengan panel Performa, latihan akan menjadikannya lebih sempurna. Coba buat profil halaman Anda sendiri dan analisis hasilnya. Jika ada pertanyaan tentang hasilnya, buka pertanyaan Stack Overflow yang diberi tag dengan google-chrome-devtools
. Sertakan screenshot atau link ke
halaman yang dapat direproduksi, jika memungkinkan.
Untuk menjadi ahli dalam kinerja waktu proses, Anda harus mempelajari cara browser menerjemahkan HTML, CSS, dan JS menjadi piksel pada layar. Tempat terbaik untuk memulai adalah Ringkasan Performa Rendering. The Anatomy Of A Frame membahas secara lebih mendetail.
Terakhir, ada banyak cara untuk meningkatkan performa runtime. Tutorial ini berfokus pada satu bottleneck animasi tertentu untuk memberi Anda tur yang terfokus melalui panel Performa, tetapi ini hanyalah salah satu dari banyak bottleneck yang mungkin Anda temui. Deretan Performa Rendering lainnya memiliki banyak tips bagus untuk meningkatkan berbagai aspek performa runtime, seperti:
- Mengoptimalkan Eksekusi JS
- Mengurangi Cakupan dan Kompleksitas Penghitungan Gaya
- Menghindari Tata Letak yang Besar dan Kompleks serta Layout Thrashing
- Menyederhanakan Kompleksitas Paint dan Mengurangi Area Paint
- Tetap Berpegang pada Properti Khusus Compositor dan Kelola Jumlah Lapisan
- Melakukan Debounce pada Pengendali Input Anda