Studi Kasus

Cara Reddit menggunakan pengoptimal R8 untuk peningkatan performa yang berdampak tinggi

Waktu baca: 4 menit
Ben Weiss
Developer Relations Engineer

Di dunia aplikasi seluler saat ini, pengalaman pengguna yang lancar bukan hanya fitur, tetapi juga kebutuhan. Waktu pemuatan yang lambat, antarmuka yang tidak responsif, dan ketidakstabilan dapat menjadi hambatan signifikan bagi interaksi dan retensi pengguna. Selama bekerja dengan tim Android Developer Relations, tim teknik di Reddit menggunakan Skor Performa Aplikasi untuk mengevaluasi aplikasi mereka. Setelah menilai performa, mereka mengidentifikasi potensi peningkatan yang signifikan dan memutuskan untuk mengambil langkah-langkah guna mengaktifkan kemampuan penuh R8, pengoptimal aplikasi Android. Inisiatif yang terfokus ini menghasilkan peningkatan yang luar biasa dalam waktu startup, pengurangan frame yang lambat atau terhenti dan ANR, serta peningkatan keseluruhan dalam rating Play Store. Studi kasus ini menguraikan cara Reddit mencapai hasil yang mengesankan ini.

Cara Pengoptimal R8 membantu Reddit

Pengoptimal R8 adalah alat dasar untuk pengoptimalan performa di Android. Alat ini mengambil berbagai langkah untuk meningkatkan performa aplikasi.Mari kita lihat secara singkat langkah-langkah yang paling berdampak.

  • Tree shaking adalah langkah terpenting untuk mengurangi ukuran aplikasi. Di sini, kode yang tidak digunakan dari dependensi aplikasi dan aplikasi itu sendiri akan dihapus.
  • Method inlining mengganti panggilan metode dengan kode sebenarnya, sehingga membuat aplikasi lebih berperforma.
  • Class merging, dan strategi lainnya diterapkan untuk membuat kode lebih ringkas. Pada tahap ini, keterbacaan kode sumber oleh manusia tidak lagi menjadi masalah, tetapi membuat kode yang dikompilasi berfungsi dengan cepat. Jadi, abstraksi, seperti antarmuka atau hierarki class tidak relevan di sini dan akan dihapus.
  • Identifier minification mengubah nama class, kolom, dan metode menjadi nama yang lebih pendek dan tidak bermakna. Jadi, bukan MyDataModel, Anda mungkin akan mendapatkan class yang disebut a.
  • Resource shrinking menghapus resource yang tidak digunakan seperti file xml dan drawable untuk mengurangi lebih lanjut ukuran aplikasi.
image.png

Tahap utama Pengoptimalan R8

Dari data yang akurat hingga kepuasan pengguna: Mengidentifikasi keberhasilan dalam produksi

Reddit melihat hasil performa yang meningkat segera setelah versi baru aplikasi diluncurkan kepada pengguna.Dengan menggunakan Android Vitals dan Crashlytics, Reddit dapat mengambil metrik performa di perangkat sebenarnya dengan pengguna yang sebenarnya, sehingga mereka dapat membandingkan rilis baru dengan versi sebelumnya.

image.png

Cara R8 meningkatkan performa aplikasi Reddit

Tim mengamati startup dingin 40% lebih cepat, pengurangan 30% pada error "Aplikasi Tidak Merespons" (ANR), peningkatan 25% dalam rendering frame, dan pengurangan 14% dalam ukuran aplikasi.

Peningkatan ini sangat penting untuk kepuasan pengguna. Startup yang lebih cepat berarti lebih sedikit waktu tunggu dan akses yang lebih cepat ke konten. ANR yang lebih sedikit menghasilkan aplikasi yang lebih stabil dan andal, sehingga mengurangi frustrasi pengguna. Rendering frame yang lebih lancar menghilangkan jank UI, sehingga membuat scrolling dan animasi terasa lancar dan responsif. Dampak teknis positif ini juga terlihat jelas dalam sentimen pengguna.

Indikator kepuasan pengguna atas keberhasilan pengoptimalan terlihat langsung di Google Play Store. Setelah peluncuran versi yang dioptimalkan R8, tim melihat perubahan yang dramatis dan positif dalam sentimen dan interaksi pengguna.

image.png

Drew Heavner: "Mengaktifkan alat potensi penuh R8 dalam waktu kurang dari 2 minggu"

Yang paling mengesankan, hal ini dicapai dengan upaya yang terfokus. Drew Heavner, Staff Software Engineer di Reddit yang mengerjakan inisiatif ini, mencatat bahwa penerapan perubahan untuk mengaktifkan potensi penuh R8 memerlukan waktu kurang dari dua minggu.

Mengonfirmasi keuntungan: Analisis mendalam dengan macrobenchmark

Setelah mengamati peningkatan signifikan di dunia nyata, tim teknik Reddit dan tim Android Developer Relations di Google melakukan benchmark mendetail untuk mengonfirmasi keuntungan secara ilmiah dan bereksperimen dengan pengoptimalan lebih lanjut. Untuk analisis ini, tim teknik Reddit menyediakan dua versi aplikasi mereka: satu tanpa pengoptimalan dan yang lainnya menerapkan R8 dan dua alat pengoptimalan performa dasar lainnya: Profil Dasar Pengukuran, dan Profil Startup.

Profil Dasar Pengukuran secara efektif memindahkan langkah-langkah kompilasi Tepat Waktu (JIT) dari perangkat pengguna ke mesin developer. Kode yang dikompilasi Mendahului Waktu (AOT) yang dihasilkan telah terbukti mengurangi waktu startup dan masalah rendering.

Saat aplikasi dikemas, dexer d8 mengambil class dan metode serta membuat file classes.dex aplikasi Anda. Saat pengguna membuka aplikasi, file dex ini dimuat, satu demi satu hingga aplikasi dapat dimulai. Dengan menyediakan Profil Startup , Anda memberi tahu d8 class dan metode mana yang akan dikemas dalam file classes.dex pertama. Struktur ini memungkinkan aplikasi memuat lebih sedikit file, yang pada gilirannya meningkatkan kecepatan startup.

Jetpack Macrobenchmark adalah alat inti untuk fase ini, yang memungkinkan pengukuran interaksi pengguna yang akurat dalam lingkungan yang terkontrol. Untuk menyimulasikan perjalanan pengguna yang umum, mereka menggunakan UIAutomator API untuk membuat pengujian yang membuka aplikasi, men-scroll ke bawah tiga kali, lalu men-scroll kembali ke atas.

Pada akhirnya, yang diperlukan untuk menulis benchmark hanyalah hal berikut:

uiAutomator {

  startApp(REDDIT)

  repeat(3) {

    onView { isScrollable }.fling(Direction.DOWN) }

  repeat(3) {

    onView {isScrollable }.fling(Direction.UP)

  }

}

Data benchmark mengonfirmasi pengamatan lapangan dan memberikan insight yang lebih mendalam. Aplikasi yang dioptimalkan sepenuhnya dimulai 55% lebih cepat dan pengguna dapat mulai menjelajah 18% lebih cepat. Aplikasi yang dioptimalkan juga menunjukkan pengurangan dua pertiga dalam kejadian kompilasi Tepat Waktu (JIT) dan pengurangan sepertiga dalam waktu kompilasi JIT. Rendering frame meningkat, sehingga 19% lebih banyak frame dirender selama perjalanan pengguna yang di-benchmark. Terakhir, ukuran aplikasi dikurangi lebih dari sepertiga.

image.png

Peningkatan performa keseluruhan Reddit

Anda dapat mengukur waktu kompilasi JIT dengan metrik bagian rekaman aktivitas Macrobenchmark kustom seperti ini:

val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")

Mengaktifkan teknologi di balik transformasi: R8

Untuk mengaktifkan R8 dalam mode penuh, Anda mengonfigurasi file app/build.gradle.kts dengan menetapkan minifyEnabled dan shrinkResources ke true dalam jenis build rilis.

android {

    ...

    buildTypes {

        release {

            isMinifyEnabled = true

            isShrinkResources = true

            proguardFiles(

                getDefaultProguardFile("proguard-android-optimize.txt"),

                "keep-rules.pro",

            )

        }

    }

}

Langkah ini harus diikuti dengan pengujian menyeluruh dari ujung ke ujung, karena pengoptimalan performa dapat menyebabkan perilaku yang tidak diinginkan, yang sebaiknya Anda tangkap sebelum pengguna Anda melakukannya.

Seperti yang ditunjukkan sebelumnya dalam artikel ini, R8 melakukan pengoptimalan ekstensif untuk memaksimalkan manfaat performa Anda. R8 membuat modifikasi substansial pada kode, termasuk mengganti nama, memindahkan, dan menghapus class, kolom, dan metode. Jika Anda mengamati bahwa modifikasi ini menyebabkan error, Anda harus menentukan bagian kode mana yang tidak boleh diubah oleh R8 dengan mendeklarasikannya dalam aturan keep.

Ikuti contoh Reddit di aplikasi Anda

Keberhasilan Reddit dengan R8 berfungsi sebagai studi kasus yang efektif untuk tim pengembangan mana pun yang ingin memberikan dampak signifikan dan mudah pada performa aplikasi mereka. Korelasi langsung antara peningkatan teknis dan peningkatan kepuasan pengguna berikutnya menggarisbawahi nilai pengoptimalan performa.

Dengan mengikuti cetak biru yang ditetapkan dalam studi kasus ini—menggunakan alat seperti Skor Performa Aplikasi untuk mengidentifikasi peluang, mengaktifkan potensi pengoptimalan penuh R8, memantau data dunia nyata, dan menggunakan benchmark untuk mengonfirmasi dan memperdalam pemahaman—developer lain dapat mencapai keuntungan serupa.

Untuk mulai menggunakan R8 di aplikasi Anda sendiri, lihat dokumentasi dan panduan resmi yang baru diperbarui tentang cara mengaktifkan, mengonfigurasi, dan memecahkan masalah pengoptimal R8.

Ditulis oleh:

Lanjutkan membaca