Các 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 hiệu quả
Đọ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 điều 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à tỷ lệ 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 của ứng dụng để đánh giá ứng dụng của họ. Sau khi đánh giá hiệu suất, họ đã xác định được tiềm năng cải thiện đáng kể và quyết định thực hiện các bước để tận dụng toàn bộ 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ố khung hình 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 sẽ 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ông cụ này thực hiện nhiều bước để cải thiện hiệu suất của ứng dụng.Hãy xem nhanh những bước có tác động lớn nhất.
- Lắc cây 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 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ã trở nên gọn gàng 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ệ phân cấp lớp, không quan trọng ở đây và sẽ bị xoá.
- Giảm thiểu giá trị nhận dạng 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ô 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à tài nguyên có thể vẽ để giảm thêm kích thước ứng dụng.
Các giai đoạn chính của quá trình tối ưu hoá R8
Từ dữ liệu thực tế đến sự 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 kết quả 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ể thu thập các chỉ số hiệu suất trên các thiết bị thực có 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 của ứng dụng Reddit
Nhóm đã quan sát 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 cải tiến này rất quan trọng để người dùng hài lòng. Thời gian khởi động nhanh hơn có nghĩa là thời gian chờ ít hơn và truy cập nội dung nhanh hơn. Ít lỗi ANR hơn giúp ứng dụng ổn định và đáng tin cậy hơn, giảm sự thất vọng của người dùng. Khả năng kết xuất khung hình mượt mà hơn giúp loại bỏ tình trạng giật lag trên 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 kỹ thuật tích cực này cũng được thể hiện rõ ràng trong tâm lý 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 sự thành công của quá trình tối ưu hoá được hiển thị trực tiếp trên Cửa hàng Google Play. Sau khi triển khai phiên bản được tối ưu hoá bằng R8, nhóm đã nhận thấy sự thay đổi đáng kể và tích cực trong tâm lý và mức độ tương tác của người dùng.
Drew Heavner: "Khai thác toàn bộ tiềm năng của công cụ R8 trong vòng chưa đầy 2 tuần"
Điều ấn tượng nhất là điều này đã được thực hiện với nỗ lực tập trung. Drew Heavner, Kỹ sư phần mềm cấp cao tại Reddit, người đã thực hiện sáng kiến này, lưu ý 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 đầy hai tuần.
Xác nhận mức tăng: Nghiên cứu chuyên sâu bằng điểm chuẩn macro
Sau khi quan sát thấy những cải tiến đáng kể trong thế giới thực, 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 mức tăng và thử nghiệm các hoạt động tối ưu hoá khác. Đối với phân tích này, nhóm kỹ thuật của Reddit đã cung cấp hai phiên bản ứng dụng của họ: một phiên bản không có hoạt động tối ưu hoá và một phiên bản áp dụng R8 cùng hai 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ở giúp chuyển các bước biên dịch Đúng thời điểm (JIT) một cách hiệu quả từ thiết bị của người dùng sang máy của nhà phát triển. Mã đã biên dịch Trước thời điểm (AOT) được tạo đã 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 dexer 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 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, từ đó 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 tương tác của người dùng trong 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 bài kiểm tra 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 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 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. Khả năng kết xuất khung hình được cải thiện, giúp kết xuất thêm 19% khung hình so với 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ác 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ố phần theo dõi Macrobenchmark tuỳ chỉnh như sau:
val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")Kích hoạt công nghệ đằng sau quá trình chuyển đổi: R8
Để kích hoạt R8 ở chế độ đầy đủ, bạn hãy đị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 được thực hiện theo quy trình kiểm thử toàn diện từ đầu đến cuối, vì các hoạt động 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 ở phần trước trong bài viết này, R8 thực hiện các hoạt động tối ưu hoá mở rộng để tối đa hoá lợi ích về hiệu suất. R8 thực hiện các sửa đổi đáng kể đối với mã, bao gồm đổi tên, di chuyển và xoá các lớp, trường và phương thức. Nếu bạn nhận thấy những 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 nên sửa đổi bằng cách khai báo những phần đó trong các quy tắc giữ lại.
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 nỗ lực thấp đố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 cải tiến kỹ thuật và sự gia tăng sau đó về mức độ hài lòng của người dùng nhấn mạnh giá trị của việc tối ưu hoá hiệu suất.
Bằng cách làm theo kế hoạch chi tiết đượ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 toàn bộ tiềm năng tối ưu hoá của R8, theo dõi dữ liệu thực tế và sử dụng điểm chuẩn để xác nhận và hiểu sâu hơn – các nhà phát triển khác 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 cập nhật về cách kích hoạ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
-
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 phát triển. Khi ứng dụng mở rộng quy mô, nhóm kỹ thuật đã xác định thời gian khởi động ứng dụng là một lĩnh vực 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, Tracy Agyemang • Đọc trong 2 phút
-
Các nghiên cứu điển hình
Việc tái tạo các lỗi hồi quy hiệu suất rất khó, khiến các lỗi hồi quy trở thành một điểm tắc nghẽn lớn đối với nhà phát triển ứng dụng di động.
Alice Yuan, Arti Arutiunov, Nikita Ogorodnikov • Đọc trong 4 phút
-
năm 2026năm 2026
Các nghiên cứu điển hình
Gần đây, FotMob đã chứng kiến mức tăng lớn nhất trong một ngày trên Wear OS trong số đối tượng đã cài đặt trong 5 năm, gấp 2 đến 3 lần mức trung bình hằng ngày. Bí quyết là gì? Một quy trình cài đặt đơn giản trên nhiều thiết bị giúp người dùng khám phá ứng dụng Wear OS trực tiếp từ điện thoại của họ.
Garan Jenkin • Đọc trong 3 phút
Nhận thông tin cập nhật
Nhận thông tin chi tiết mới nhất về quá trình phát triển Android được gửi vào hộp thư đến của bạn hằng tuần.