Jetpack Compose giúp tăng tốc độ phát triển giao diện người dùng và cải thiện quá trình phát triển Android. Tuy nhiên, hãy cân nhắc xem việc thêm Compose vào một ứng dụng hiện có có thể ảnh hưởng như thế nào đến các chỉ số như kích thước APK, bản dựng và hiệu suất thời gian chạy của ứng dụng.
Kích thước APK và thời gian tạo bản dựng
Phần này trình bày tác động đến kích thước APK và thời gian xây dựng bằng cách xem xét ứng dụng mẫu Sunflower – một ứng dụng minh hoạ các phương pháp hay nhất khi di chuyển một ứng dụng dựa trên Khung hiển thị sang Compose.
Kích thước APK
Việc thêm thư viện vào dự án sẽ làm tăng kích thước APK của dự án. Các kết quả sau là dành cho APK phát hành rút gọn của mỗi dự án đã bật tính năng rút gọn mã và tài nguyên, sử dụng chế độ đầy đủ R8 và được đo lường bằng Công cụ phân tích APK.
Chỉ xem | Khung hiển thị kết hợp và Compose | Chỉ Compose | |
---|---|---|---|
Kích thước tải xuống | 2.252 KB | 3.034 KB | 2.966 KB |
Khi lần đầu tiên thêm Compose vào Sunflower, kích thước APK đã tăng từ 2.252 KB lên 3.034 KB, tức là tăng 782 KB. APK được tạo bao gồm bản dựng giao diện người dùng kết hợp giữa Khung hiển thị và Compose. Việc tăng kích thước này là điều dễ hiểu vì các phần phụ thuộc bổ sung đã được thêm vào Sunflower.
Ngược lại, khi Sunflower được di chuyển sang một ứng dụng chỉ dùng Compose, kích thước APK đã giảm từ 3.034 KB xuống 2.966 KB, tức là giảm 68 KB. Sự sụt giảm này là do việc xoá các phần phụ thuộc View không dùng đến, chẳng hạn như AppCompat
và ConstraintLayout
.
Thời gian tạo bản dựng
Việc thêm Compose sẽ làm tăng thời gian tạo ứng dụng vì trình biên dịch Compose xử lý các thành phần kết hợp trong ứng dụng của bạn. Các kết quả sau đây được thu thập bằng công cụ gradle-profiler
độc lập. Công cụ này thực thi một bản dựng nhiều lần để có thể thu được thời gian tạo trung bình cho thời lượng tạo bản gỡ lỗi của Sunflower:
gradle-profiler --benchmark --project-dir . :app:assembleDebug
Chỉ xem | Khung hiển thị kết hợp và Compose | Chỉ Compose | |
---|---|---|---|
Thời gian trung bình để tạo bản dựng | 299,47 mili giây | 399,09 mili giây | 342,16 mili giây |
Khi lần đầu tiên thêm Compose vào Sunflower, thời gian xây dựng trung bình đã tăng từ 299 mili giây lên 399 mili giây, tức là tăng 100 mili giây. Thời lượng này là do trình biên dịch Compose thực hiện các tác vụ bổ sung để chuyển đổi mã Compose được xác định trong dự án.
Ngược lại, thời gian xây dựng trung bình giảm xuống còn 342 mili giây, tức là giảm 57 mili giây, khi quá trình di chuyển Sunflower sang Compose hoàn tất. Việc giảm này có thể là do một số yếu tố giúp giảm thời gian tạo, chẳng hạn như xoá liên kết dữ liệu, di chuyển các phần phụ thuộc sử dụng kapt sang KSP và cập nhật một số phần phụ thuộc lên phiên bản mới nhất.
Tóm tắt
Việc sử dụng Compose sẽ làm tăng kích thước APK của ứng dụng một cách hiệu quả, đồng thời tăng hiệu suất thời gian xây dựng của ứng dụng do quy trình biên dịch mã Compose. Tuy nhiên, bạn cần cân nhắc những điểm đánh đổi này với lợi ích của Compose, đặc biệt là khi năng suất của nhà phát triển tăng lên khi áp dụng Compose. Ví dụ: nhóm Play Store nhận thấy rằng việc viết giao diện người dùng cần ít mã hơn nhiều, đôi khi lên đến 50%, nhờ đó tăng năng suất và khả năng duy trì mã.
Bạn có thể đọc thêm các nghiên cứu điển hình trong bài viết Triển khai Compose cho Teams.
Hiệu suất thời gian chạy
Phần này trình bày các chủ đề liên quan đến hiệu suất của thời gian chạy trong Jetpack Compose để giúp bạn hiểu cách Jetpack Compose so sánh với hiệu suất của hệ thống Khung hiển thị và cách đo lường hiệu suất đó.
Soạn lại thông minh
Khi các phần của giao diện người dùng không hợp lệ, Compose sẽ cố gắng kết hợp lại các phần cần cập nhật. Hãy đọc thêm về vấn đề này trong tài liệu về Vòng đời của các thành phần kết hợp và Các giai đoạn của Jetpack Compose.
Hồ sơ cơ sở
Hồ sơ cơ sở là một cách tuyệt vời để tăng tốc các hành trình phổ biến của người dùng. Việc đưa Hồ sơ cơ sở vào ứng dụng có thể cải thiện tốc độ thực thi mã khoảng 30% kể từ lần khởi chạy đầu tiên bằng cách tránh các bước diễn giải và biên dịch trong khi thực thi (JIT) cho các đường dẫn mã đi kèm.
Thư viện Jetpack Compose có Hồ sơ cơ sở riêng và bạn sẽ tự động nhận được những hoạt động tối ưu hoá này khi sử dụng Compose trong ứng dụng. Tuy nhiên, những hoạt động tối ưu hoá này chỉ ảnh hưởng đến các đường dẫn mã trong thư viện Compose, vì vậy, bạn nên thêm Hồ sơ cơ sở vào ứng dụng để bao gồm các đường dẫn mã bên ngoài Compose.
So sánh với hệ thống Chế độ xem
Jetpack Compose có nhiều điểm cải tiến so với hệ thống Khung hiển thị. Những điểm cải tiến này được mô tả trong các phần sau.
Chế độ xem mở rộng mọi mặt
Mỗi View
vẽ trên màn hình, chẳng hạn như TextView
, Button
hoặc ImageView
, đều yêu cầu phân bổ bộ nhớ, theo dõi trạng thái rõ ràng và nhiều lệnh gọi lại để hỗ trợ tất cả trường hợp sử dụng. Ngoài ra, chủ sở hữu View
tuỳ chỉnh cần triển khai logic rõ ràng để ngăn chặn thao tác vẽ lại khi không cần thiết, chẳng hạn như để xử lý dữ liệu lặp lại.
Jetpack Compose dùng nhiều cách để giải quyết vấn đề này. Compose không có các đối tượng có thể cập nhật rõ ràng cho khung hiển thị vẽ. Các phần tử trên giao diện người dùng là các hàm có khả năng kết hợp đơn giản. Đây là các hàm có thông tin được ghi vào thành phần theo cách có thể phát lại. Điều này giúp giảm bớt lệnh gọi lại, hoạt động phân bổ bộ nhớ và việc theo dõi trạng thái rõ ràng chỉ đối với các thành phần có khả năng kết hợp cần có các tính năng nêu trên thay vì yêu cầu các hoạt động đó bằng tất cả các phần mở rộng thuộc loại View
đã cho.
Hơn nữa, Compose cung cấp các lần kết hợp lại thông minh, phát lại kết quả đã vẽ trước đó nếu bạn không cần thực hiện thay đổi.
Nhiều thẻ bố cục
ViewGroup truyền thống có rất nhiều biểu thức trong các API đo lường và API bố cục, khiến chúng dễ bị nhiều lượt truyền bố cục. Nhiều lượt truyền bố cục này có thể tạo ra tác dụng theo cấp số nhân nếu được thực hiện tại các điểm lồng nhau cụ thể trong hệ phân cấp khung hiển thị.
Jetpack Compose thực thi một lần truyền bố cục cho tất cả các thành phần kết hợp của bố cục thông qua hợp đồng API. Điều này cho phép Compose xử lý hiệu quả các cây giao diện người dùng sâu. Nếu cần nhiều hoạt động đo lường, Compose có phép đo lường hàm nội tại.
Xem hiệu suất khi khởi động
Hệ thống khung hiển thị cần tăng cường bố cục XML khi lần đầu hiển thị một bố cục cụ thể. Chi phí này được lưu trong Jetpack Compose vì các bố cục được viết bằng Kotlin và được biên dịch giống như phần còn lại của ứng dụng.
Đo điểm chuẩn Compose
Trong Jetpack Compose 1.0, hiệu suất của một ứng dụng ở chế độ debug
và release
có sự khác biệt đáng kể. Để biết thời gian đại diện, hãy luôn
sử dụng bản dựng release
thay vì debug
khi lập hồ sơ ứng dụng.
Để kiểm tra hiệu quả hoạt động của mã Jetpack Compose, bạn có thể sử dụng thư viện Jetpack Macrobenchmark. Để tìm hiểu cách sử dụng thư viện này với Jetpack Compose, hãy xem dự án MacrobenchmarkSample.
Nhóm Jetpack Compose cũng sử dụng Macrobenchmark để phát hiện mọi lần hồi quy có thể xảy ra. Ví dụ: hãy xem điểm chuẩn cho cột tải lười và trang tổng quan của cột này để theo dõi số lần hồi quy.
Cài đặt hồ sơ Compose
Vì Jetpack Compose là một thư viện chưa được gói nên thư viện này không được hưởng các lợi ích của Zygote. Zygote sẽ tải trước các lớp và đối tượng có thể vẽ cho Bộ công cụ giao diện người dùng của hệ thống Khung hiển thị. Jetpack Compose 1.0 sử dụng chế độ cài đặt hồ sơ cho các bản dựng phát hành. Trình cài đặt hồ sơ cho phép các ứng dụng chỉ định mã quan trọng cần được biên dịch trước khi thực thi (AOT) tại thời điểm cài đặt. Compose gửi các quy tắc cài đặt hồ sơ để giảm thời gian khởi động và hiện tượng giật trong ứng dụng Compose.
Đề xuất cho bạn
- Lưu ý: văn bản có đường liên kết sẽ hiện khi JavaScript tắt
- Những điểm khác cần cân nhắc
- Sử dụng Compose trong Khung hiển thị
- Cuộn