Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pengguna mengharapkan aplikasi mereka tetap responsif, terasa alami, dan tidak menguras baterai mereka. Secara teknis, performa adalah persyaratan non-fungsional, tetapi memperlakukan performa sebagai fitur membantu Anda memberikan harapan pengguna Anda. Tentukan tujuan dan ukur hasil — ini adalah faktor utama. Tentukan skenario penting performa Anda, tentukan apa arti performa yang baik, lalu ukur lebih awal dan sering sepanjang siklus hidup proyek Anda agar yakin Anda akan mencapai tujuan Anda.
Tentukan tujuan
Pengalaman pengguna adalah cara dasar untuk menentukan performa yang baik. Waktu mulai aplikasi dapat memengaruhi persepsi pengguna tentang performanya. Pengguna mungkin menganggap waktu peluncuran aplikasi kurang dari satu detik sebagai sangat baik, kurang dari lima detik sebagai baik, dan lebih dari lima detik sebagai buruk.
Metrik lain memiliki dampak yang kurang jelas pada pengalaman pengguna, seperti memori. Kemungkinan aplikasi dihentikan saat ditangguhkan atau tidak aktif naik dengan jumlah memori yang digunakan aplikasi aktif. Penggunaan memori yang tinggi menurunkan pengalaman untuk semua aplikasi pada sistem, sehingga memiliki tujuan konsumsi memori adalah wajar.
Tetapkan tujuan awal yang spesifik dan terukur. Mereka harus termasuk dalam tiga kategori:
- Waktu — berapa lama waktu yang dibutuhkan pengguna atau aplikasi untuk menyelesaikan tugas
- Fluiditas — laju dan kelangsungan di mana aplikasi mengulangi dirinya sendiri sebagai respons terhadap interaksi pengguna
- Efisiensi — seberapa baik aplikasi menghemat sumber daya sistem, termasuk daya baterai
Time
Pikirkan rentang waktu yang berlalu (kelas interaksi) yang dapat diterima bagi pengguna untuk menyelesaikan tugas mereka.
| Kelas interaksi | Persepsi pengguna | Ideal | Maximum | Examples |
|---|---|---|---|---|
| Cepat | Penundaan yang nyaris tidak terlihat | 100 ms | 200 milidetik | Memunculkan bilah aplikasi; tekan tombol (respons pertama) |
| Khas | Cepat, tapi tidak kencang | 300 ms | 500 milidetik | Mengubah ukuran; zoom semantik |
| Responsif | Tidak cepat, tapi terasa responsif | 500 milidetik | 1 detik | Menavigasi ke halaman lain; melanjutkan aplikasi |
| Launch | Pengalaman kompetitif | 1 detik | 3 detik | Luncurkan aplikasi untuk pertama kalinya |
| Berkelanjutan | Tidak lagi terasa responsif | 500 milidetik | 5 detik | Mengunduh file dari Internet |
| Tawanan | Lama; pengguna dapat beralih ke hal lain | 500 milidetik | 10 detik | Menginstal beberapa aplikasi dari Store |
Tetapkan kelas interaksi ke skenario performa aplikasi Anda. Untuk setiap skenario, tetapkan referensi titik waktu aplikasi, sebagian dari pengalaman pengguna, dan kelas interaksi.
Fluiditas
Tujuan fluiditas terukur tertentu untuk aplikasi Anda mungkin meliputi:
- Tidak ada pemberhentian dan mulai ulang layar (gangguan)
- Animasi ditampilkan pada 60 frame per detik (FPS)
- Saat pengguna menggeser atau menggulir, aplikasi menyajikan 3-6 halaman konten per detik
Efficiency
Tujuan efisiensi terukur tertentu untuk aplikasi Anda mungkin meliputi:
- Persentase CPU aplikasi Anda berada pada atau di bawah nilai target dan penggunaan memori dalam MB berada di atau di bawah target setiap saat
- Saat aplikasi tidak aktif, penggunaan CPU dan memori minimal
- Aplikasi Anda dapat digunakan secara aktif untuk jumlah jam target pada daya baterai
Mendesain aplikasi Anda untuk performa
Gunakan tujuan performa Anda untuk memengaruhi desain aplikasi Anda. Pertimbangkan aspek-aspek ini:
UI
- Maksimalkan penguraian dan waktu pemuatan dan efisiensi memori untuk setiap halaman dengan mengoptimalkan markup XAML Anda. Tangguhkan pemuatan UI dan kode hingga diperlukan.
- Untuk
ListViewdanGridView, buat semua item berukuran sama dan gunakan teknik pengoptimalan sebanyak yang Anda bisa. - Nyatakan UI dalam markup daripada membangunnya secara imperatif dalam kode.
- Tunda pembuatan elemen UI hingga pengguna membutuhkannya menggunakan atribut x:Load .
- Utamakan transisi dan animasi tema daripada animasi berbasis storyboard. Animasi papan cerita memerlukan pembaruan konstan ke layar dan menjaga alur CPU dan grafis tetap aktif.
- Muat gambar dengan ukuran yang sesuai untuk tampilan tempat Anda menyajikannya.
CPU, memori, dan daya
- Jadwalkan pekerjaan berprioritas lebih rendah pada utas berprioritas lebih rendah. Lihat Pemrograman asinkron dan kelas DispatcherQueue .
- Minimalkan jejak memori aplikasi Anda dengan merilis sumber daya yang mahal (seperti media) saat tidak diperlukan.
- Hindari kebocoran memori dengan membatalkan pendaftaran penanganan aktivitas dan mendereferensikan elemen UI jika memungkinkan.
- Untuk efisiensi baterai, bersikaplah konservatif dengan seberapa sering Anda melakukan polling untuk data, mengkueri sensor, atau menjadwalkan pekerjaan pada CPU saat diam.
akses data
- Jika memungkinkan, muat konten terlebih dahulu.
- Konten cache yang mahal untuk diakses.
- Untuk cache miss, tampilkan UI placeholder secepat mungkin yang menunjukkan bahwa aplikasi masih memuat konten.
Alat untuk kinerja
Saat Anda membuat kode, tambahkan kode yang mencatat pesan dan peristiwa di titik tertentu saat aplikasi Anda berjalan. Nantinya, gunakan alat pembuatan profil seperti Windows Performance Recorder dan Windows Penganalisis Kinerja (keduanya disertakan dalam Toolkit Performa Windows) untuk membuat dan melihat laporan tentang performa aplikasi Anda.
Windows menyediakan API pengelogan yang didukung oleh Pelacakan Peristiwa untuk Windows (ETW) yang menawarkan solusi pengelogan dan pelacakan peristiwa yang kaya. API dalam namespace Windows.Foundation.Diagnostics mencakup kelas FileLoggingSession, LoggingActivity, LoggingChannel, dan LoggingSession.
// using Windows.Foundation.Diagnostics;
LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
myLoggingChannel.LogMessage("Here's my logged message.", LoggingLevel.Information);
Untuk mencatat peristiwa mulai dan berhenti dalam jangka waktu tertentu:
LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
LoggingActivity myLoggingActivity;
using (myLoggingActivity = new LoggingActivity("MyLoggingActivity", myLoggingChannel))
{
// A start event is logged when the activity begins.
// Add code here to do something of interest.
}
// An end event is logged when the activity ends.
Uji dan ukur berdasarkan sasaran kinerja
Gunakan teknik dan alat berikut untuk menguji bagaimana aplikasi Anda dibandingkan dengan target kinerja Anda:
- Uji terhadap berbagai konfigurasi perangkat keras, termasuk desktop, laptop, ultrabook, dan tablet.
- Uji terhadap berbagai ukuran layar. Layar yang lebih luas menampilkan lebih banyak konten, yang dapat berdampak negatif pada performa.
- Hilangkan variabel pengujian sebanyak yang Anda bisa:
- Nonaktifkan aplikasi latar belakang pada perangkat pengujian.
- Buat aplikasi Anda di konfigurasi Rilis sebelum menyebarkannya ke perangkat pengujian.
- Jalankan aplikasi beberapa kali untuk membantu menghilangkan variabel pengujian acak dan memastikan pengukuran yang konsisten.
- Uji untuk mengurangi ketersediaan daya. Perangkat pengguna mungkin memiliki daya yang jauh lebih sedikit daripada mesin pengembangan Anda.
- Gunakan kombinasi alat seperti alat diagnostik Visual Studio dan Windows Penganalisis Kinerja untuk mengukur performa aplikasi.
Menanggapi hasil pengujian performa
Setelah Anda menganalisis hasil pengujian performa, tentukan apakah ada perubahan yang diperlukan:
- Haruskah Anda mengubah keputusan desain aplikasi atau mengoptimalkan kode Anda?
- Haruskah Anda menambahkan, menghapus, atau mengubah instrumentasi dalam kode?
- Haruskah Anda merevisi tujuan performa Anda?
Jika perubahan diperlukan, lakukan perubahan tersebut dan kembali ke proses instrumentasi atau pengujian.
Optimize
Optimalkan hanya jalur kode kritis performa di aplikasi Anda — jalur yang paling banyak dihabiskan. Pemrofilan memberi tahu Anda area mana saja yang dimaksud. Seringkali, ada trade-off antara praktik desain yang baik dan kode yang berkinerja pada pengoptimalan tertinggi. Prioritaskan produktivitas pengembang dan desain perangkat lunak yang baik di area di mana performa tidak menjadi perhatian.
Konten terkait
Windows developer