Nghiên cứu điển hình
Cách Reddit sử dụng trình tối ưu hoá R8 để cải thiện hiệu suất một cách đáng kể
Đọc trong 4 phút
Trong thế giới ứng dụng di động ngày nay, trải nghiệm người dùng liền mạch không chỉ là một tính năng mà còn là một yếu tố cần thiết. Thời gian tải chậm, giao diện không phản hồi và sự không ổn định có thể là những rào cản đáng kể đối với mức độ tương tác và khả năng giữ chân người dùng. Trong quá trình làm việc với Nhóm Quan hệ với nhà phát triển Android, nhóm kỹ thuật tại Reddit đã sử dụng Điểm hiệu suất ứng dụng để đánh giá ứng dụng của họ. Sau khi đánh giá hiệu suất, họ nhận thấy có thể cải thiện đáng kể và quyết định thực hiện các bước để khai thác tối đa sức mạnh của R8, trình tối ưu hoá ứng dụng Android. Sáng kiến tập trung này đã giúp cải thiện đáng kể thời gian khởi động, giảm số lượng khung hình bị chậm hoặc bị treo và lỗi ANR, đồng thời tăng điểm xếp hạng tổng thể trên Cửa hàng Play. Nghiên cứu điển hình này phân tích cách Reddit đạt được những kết quả ấn tượng này.
Cách Trình tối ưu hoá R8 giúp Reddit
Trình tối ưu hoá R8 là một công cụ cơ bản để tối ưu hoá hiệu suất trên Android. Có nhiều bước để cải thiện hiệu suất ứng dụng.Hãy xem nhanh những bước có tác động lớn nhất.
- Loại bỏ mã không dùng đến là bước quan trọng nhất để giảm kích thước của ứng dụng. Tại đây, mã không dùng đến từ các phần phụ thuộc của ứng dụng và chính ứng dụng sẽ bị xoá.
- Nội tuyến phương thức sẽ thay thế các lệnh gọi phương thức bằng mã thực tế, giúp ứng dụng hoạt động hiệu quả hơn.
- Hợp nhất lớp và các chiến lược khác được áp dụng để làm cho mã nhỏ gọn hơn. Tại thời điểm này, vấn đề không còn là khả năng đọc mã nguồn của con người nữa, mà là làm cho mã đã biên dịch hoạt động nhanh chóng. Vì vậy, các lớp trừu tượng, chẳng hạn như giao diện hoặc hệ thống phân cấp lớp không quan trọng ở đây và sẽ bị xoá.
-
Tính năng rút gọn mã nhận dạng sẽ thay đổi tên của các lớp, trường và phương thức thành tên ngắn hơn và vô nghĩa. Vì vậy, thay vì
MyDataModel, bạn có thể kết thúc bằng một lớp có tên là a. - Rút gọn tài nguyên xoá các tài nguyên không dùng đến, chẳng hạn như tệp xml và các thành phần có thể vẽ để giảm thêm kích thước ứng dụng.
Các giai đoạn chính của hoạt động tối ưu hoá R8
Từ dữ liệu cứng đến mức độ hài lòng của người dùng: Xác định thành công trong quá trình sản xuất
Reddit nhận thấy hiệu suất được cải thiện ngay sau khi một phiên bản mới của ứng dụng được triển khai cho người dùng. Bằng cách sử dụng Android Vitals và Crashlytics, Reddit đã có thể ghi lại các chỉ số hiệu suất trên các thiết bị thực tế với người dùng thực tế, cho phép họ so sánh bản phát hành mới với các phiên bản trước.
Cách R8 cải thiện hiệu suất ứng dụng của Reddit
Nhóm này nhận thấy thời gian khởi động nguội nhanh hơn 40% , giảm 30% lỗi "Ứng dụng không phản hồi" (ANR), cải thiện 25% khả năng kết xuất khung hình và giảm 14% kích thước ứng dụng.
Những điểm cải tiến này đóng vai trò quan trọng trong việc mang lại sự hài lòng cho người dùng. Khởi động nhanh hơn có nghĩa là bạn sẽ tốn ít thời gian chờ đợi hơn và truy cập vào nội dung nhanh hơn. Ít lỗi ANR hơn sẽ giúp ứng dụng ổn định và đáng tin cậy hơn, giảm sự khó chịu cho người dùng. Việc kết xuất khung hình mượt mà hơn sẽ loại bỏ hiện tượng giật giao diện người dùng, giúp thao tác cuộn và ảnh động trở nên mượt mà và phản hồi nhanh. Tác động tích cực về mặt kỹ thuật này cũng thể hiện rõ ràng trong cảm xúc của người dùng.
Các chỉ số về mức độ hài lòng của người dùng đối với mức độ thành công của hoạt động tối ưu hoá có thể thấy rõ trên Cửa hàng Google Play. Sau khi phát hành phiên bản được tối ưu hoá R8, nhóm nhận thấy có sự thay đổi đáng kể và tích cực về mức độ hài lòng và mức độ gắn bó của người dùng.
Drew Heavner: "Công cụ khai thác toàn bộ tiềm năng của R8 trong vòng chưa đầy 2 tuần"
Điều ấn tượng nhất là việc này được thực hiện bằng một nỗ lực tập trung. Drew Heavner, Kỹ sư phần mềm tại Reddit, người đã tham gia sáng kiến này, cho biết rằng việc triển khai các thay đổi để khai thác toàn bộ tiềm năng của R8 chỉ mất chưa đến hai tuần.
Xác nhận mức tăng: Nghiên cứu chuyên sâu bằng macrobenchmark
Sau khi nhận thấy những cải tiến đáng kể trong thực tế, nhóm kỹ thuật của Reddit và nhóm Quan hệ với nhà phát triển Android tại Google đã tiến hành các điểm chuẩn chi tiết để xác nhận một cách khoa học những lợi ích đạt được và thử nghiệm các hoạt động tối ưu hoá khác. Để phân tích, nhóm kỹ thuật của Reddit đã cung cấp 2 phiên bản ứng dụng của họ: một phiên bản không có các hoạt động tối ưu hoá và một phiên bản áp dụng R8 và 2 công cụ tối ưu hoá hiệu suất cơ bản khác: Hồ sơ cơ sở và Hồ sơ khởi động.
Hồ sơ cơ sở di chuyển hiệu quả các bước biên dịch Trong khi thực thi (JIT) ra khỏi thiết bị của người dùng và vào máy của nhà phát triển. Mã được biên dịch Trước thời gian chạy (AOT) đã được chứng minh là giúp giảm thời gian khởi động và các vấn đề về kết xuất.
Khi một ứng dụng được đóng gói, trình chuyển đổi dex d8 sẽ lấy các lớp và phương thức rồi tạo các tệp classes.dex của ứng dụng. Khi người dùng mở ứng dụng, các tệp dex này sẽ được tải lần lượt cho đến khi ứng dụng có thể khởi động. Bằng cách cung cấp một Hồ sơ khởi động, bạn cho d8 biết những lớp và phương thức cần đóng gói trong các tệp classes.dex đầu tiên. Cấu trúc này cho phép ứng dụng tải ít tệp hơn, nhờ đó cải thiện tốc độ khởi động.
Jetpack Macrobenchmark là công cụ cốt lõi cho giai đoạn này, cho phép đo lường chính xác các hoạt động tương tác của người dùng trong một môi trường được kiểm soát. Để mô phỏng hành trình điển hình của người dùng, họ đã sử dụng UIAutomator API để tạo một quy trình kiểm thử mở ứng dụng, cuộn xuống 3 lần rồi cuộn lên lại.
Cuối cùng, tất cả những gì cần thiết để viết điểm chuẩn là:
uiAutomator {
startApp(REDDIT)
repeat(3) {
onView { isScrollable }.fling(Direction.DOWN) }
repeat(3) {
onView {isScrollable }.fling(Direction.UP)
}
}
Dữ liệu điểm chuẩn xác nhận các quan sát thực tế và cung cấp thông tin chi tiết chuyên sâu hơn. Ứng dụng được tối ưu hoá hoàn toàn khởi động nhanh hơn 55% và người dùng có thể bắt đầu duyệt xem sớm hơn 18% . Ứng dụng được tối ưu hoá cũng cho thấy số lần biên dịch Đúng thời điểm (JIT) giảm 2/3 và thời gian biên dịch JIT giảm 1/3. Hiệu suất kết xuất khung hình được cải thiện, dẫn đến việc kết xuất thêm 19% số khung hình trong hành trình của người dùng đã được đo điểm chuẩn. Cuối cùng, kích thước của ứng dụng đã giảm hơn 1/3.
Cải thiện hiệu suất tổng thể của Reddit
Bạn có thể đo thời gian biên dịch JIT bằng một chỉ số tuỳ chỉnh về phần dấu vết Macrobenchmark như sau:
val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")
Bật công nghệ đằng sau quá trình chuyển đổi: R8
Để bật R8 ở chế độ đầy đủ, bạn định cấu hình tệp app/build.gradle.kts bằng cách đặt minifyEnabled và shrinkResources thành true trong loại bản dựng phát hành.
android {
...
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro",
)
}
}
}
Bước này phải đi kèm với kiểm thử toàn diện từ đầu đến cuối, vì việc tối ưu hoá hiệu suất có thể dẫn đến hành vi không mong muốn mà bạn nên phát hiện trước khi người dùng phát hiện.
Như đã trình bày trước đó trong bài viết này, R8 thực hiện nhiều bước tối ưu hoá để tối đa hoá lợi ích về hiệu suất cho bạn. R8 sửa đổi đáng kể mã, bao gồm cả việc đổi tên, di chuyển và xoá các lớp, trường và phương thức. Nếu nhận thấy những nội dung sửa đổi này gây ra lỗi, bạn cần chỉ định những phần mã mà R8 không được sửa đổi bằng cách khai báo những phần đó trong quy tắc lưu giữ.
Làm theo ví dụ của Reddit trong ứng dụng của bạn
Thành công của Reddit với R8 là một nghiên cứu điển hình hiệu quả cho mọi nhóm phát triển muốn tạo ra tác động đáng kể với ít nỗ lực đối với hiệu suất của ứng dụng. Mối tương quan trực tiếp giữa những điểm cải tiến về kỹ thuật và sự gia tăng sau đó về mức độ hài lòng của người dùng cho thấy giá trị của việc tối ưu hoá hiệu suất.
Bằng cách làm theo kế hoạch được trình bày trong nghiên cứu điển hình này (sử dụng các công cụ như Điểm hiệu suất của ứng dụng để xác định cơ hội, khai thác tối đa tiềm năng tối ưu hoá của R8, giám sát dữ liệu thực tế và sử dụng điểm chuẩn để xác nhận cũng như hiểu rõ hơn), các nhà phát triển khác cũng có thể đạt được những lợi ích tương tự.
Để bắt đầu sử dụng R8 trong ứng dụng của riêng bạn, hãy tham khảo tài liệu và hướng dẫn chính thức mới cập nhật về cách bật, định cấu hình và khắc phục sự cố trình tối ưu hoá R8.
Tiếp tục đọc
-
Nghiên cứu điển hình
Monzo là một ngân hàng kỹ thuật số ở Vương quốc Anh với 15 triệu khách hàng và đang trên đà phát triển. Khi ứng dụng mở rộng quy mô, nhóm kỹ thuật nhận thấy thời gian khởi động ứng dụng là một khía cạnh quan trọng cần cải thiện nhưng lo ngại rằng việc này sẽ đòi hỏi những thay đổi đáng kể đối với cơ sở mã của họ.
Ben Weiss • Đọc trong 2 phút
-
Nghiên cứu điển hình
TikTok là một nền tảng video ngắn toàn cầu, nổi tiếng với cơ sở người dùng khổng lồ và các tính năng cải tiến.
Ben Trengrove, Ajesh Pai • Đọc trong 2 phút
-
Nghiên cứu điển hình
Trong thế giới mạng xã hội không ngừng biến đổi, sự chú ý của người dùng có thể đến và đi rất nhanh. Các ứng dụng của Meta (Facebook và Instagram) là một trong những nền tảng xã hội lớn nhất thế giới và phục vụ hàng tỷ người dùng trên toàn cầu.
Mayuri Khinvasara Khabya • Đọc trong 4 phút
Nhận thông tin cập nhật
Nhận thông tin chi tiết mới nhất về hoạt động phát triển trên Android trong hộp thư đến của bạn mỗi tuần.