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, melainkan sebuah kebutuhan. Waktu pemuatan yang lambat, antarmuka yang tidak responsif, dan ketidakstabilan dapat menjadi penghalang signifikan bagi keterlibatan dan retensi pengguna. Selama bekerja sama dengan tim Hubungan Developer Android, tim engineering 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 untuk mengaktifkan kemampuan penuh R8, pengoptimal aplikasi Android. Inisiatif yang terfokus ini menghasilkan peningkatan yang luar biasa dalam waktu startup, pengurangan frame lambat atau berhenti 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. Ada berbagai langkah untuk meningkatkan performa aplikasi.Mari kita lihat secara singkat langkah-langkah yang paling berdampak.

  • Penghapusan kode yang tidak terpakai (tree shaking) adalah langkah terpenting untuk mengurangi ukuran aplikasi. Di sini, kode yang tidak digunakan dari dependensi aplikasi dan aplikasi itu sendiri akan dihapus.
  • Penyisipan metode menggantikan panggilan metode dengan kode sebenarnya, sehingga membuat aplikasi berperforma lebih baik.
  • Penggabungan class, dan strategi lainnya diterapkan untuk membuat kode lebih ringkas. Pada tahap ini, bukan lagi tentang keterbacaan kode sumber oleh manusia, tetapi membuat kode yang dikompilasi bekerja dengan cepat. Jadi, abstraksi, seperti hierarki antarmuka atau class tidak penting di sini dan akan dihapus.
  • Pengecilan ID mengubah nama class, kolom, dan metode menjadi nama yang lebih pendek dan tidak bermakna. Jadi, alih-alih MyDataModel, Anda mungkin akan mendapatkan class yang disebut a.
  • Penyusutan resource menghapus resource yang tidak digunakan seperti file xml dan resource yang dapat digambar untuk lebih mengurangi ukuran aplikasi.
image.png

Tahapan utama Pengoptimalan R8

Dari data konkret hingga kepuasan pengguna: Mengidentifikasi kesuksesan dalam produksi

Reddit langsung melihat hasil performa yang lebih baik setelah versi baru aplikasi diluncurkan kepada pengguna. Dengan menggunakan Android Vitals dan Crashlytics, Reddit dapat merekam metrik performa di perangkat nyata dengan pengguna sebenarnya, sehingga mereka dapat membandingkan rilis baru dengan versi sebelumnya.

image.png

Cara R8 meningkatkan performa aplikasi Reddit

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

Peningkatan ini sangat penting untuk kepuasan pengguna. Startup yang lebih cepat berarti lebih sedikit waktu menunggu dan akses yang lebih cepat ke konten. Lebih sedikit ANR 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 dapat langsung dilihat di Google Play Store. Setelah peluncuran versi yang dioptimalkan untuk R8, tim melihat perubahan yang dramatis dan positif dalam sentimen dan engagement pengguna.

image.png

Drew Heavner: "Memungkinkan 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, menyatakan bahwa penerapan perubahan untuk mengaktifkan potensi penuh R8 memerlukan waktu kurang dari dua minggu.

Mengonfirmasi peningkatan: Pembahasan mendalam dengan macrobenchmark

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

Profil Dasar Pengukuran secara efektif memindahkan langkah-langkah kompilasi Just in Time (JIT) dari perangkat pengguna ke mesin developer. Kode yang dikompilasi Ahead Of Time (AOT) yang dihasilkan telah terbukti mengurangi waktu mulai 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 per satu hingga aplikasi dapat dimulai. Dengan memberikan 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 peluncuran.

Jetpack Macrobenchmark adalah alat utama 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 tolok ukur ini adalah:

  uiAutomator {

  startApp(REDDIT)

  repeat(3) {

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

  repeat(3) {

    onView {isScrollable }.fling(Direction.UP)

  }

}

Data tolok ukur mengonfirmasi pengamatan di 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 pada kemunculan kompilasi Tepat Waktu (JIT) dan penurunan sepertiga pada waktu kompilasi JIT. Rendering frame ditingkatkan, sehingga 19% lebih banyak frame dirender selama perjalanan pengguna yang diukur dengan tolok ukur. Terakhir, ukuran aplikasi dikurangi lebih dari sepertiganya.

image.png

Peningkatan performa Reddit secara keseluruhan

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 menyetel 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 end-to-end, karena pengoptimalan performa dapat menyebabkan perilaku yang tidak diinginkan, yang sebaiknya Anda ketahui sebelum pengguna Anda mengetahuinya.

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 perlu menentukan bagian kode yang tidak boleh diubah oleh R8 dengan mendeklarasikannya dalam aturan penyimpanan.

Mengikuti contoh Reddit di aplikasi Anda

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

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

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

Ditulis oleh:

Lanjutkan membaca