So sánh chỉ số Compose và Chế độ xem

Jetpack Compose 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 mức độ ảnh hưởng của việc thêm Compose vào ứng dụng hiện có vào 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 đối với 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 về việc 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. Kết quả sau đây 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ỉ lượt xem Khung hiển thị kết hợp và Compose Chỉ Compose
Kích thước tệp tải xuống 2.252 KB 3.034 KB 2.966 KB

Trong lần đầu thêm Compose vào Sunflower, kích thước APK đã tăng từ 2.252 KB lên 3.034 KB – tăng 782 KB. Tệp APK được tạo bao gồm bản dựng giao diện người dùng với sự kết hợp giữa Khung hiển thị và Compose. Sự gia tăng này có thể xảy ra khi 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 ứng dụng chỉ dành cho Compose, kích thước APK giảm từ 3.034 KB xuống còn 2.966 KB – giảm 68 KB. Sự giảm sút này là do xoá các phần phụ thuộc không dùng đến của Thành phần hiển thị, chẳng hạn như AppCompatConstraintLayout.

Thời gian tạo bản dựng

Việc thêm Compose làm tăng thời gian xây dựng ứ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. Bạn thu được kết quả sau đây bằng cách sử dụng công cụ gradle-profiler độc lập. Công cụ này sẽ thực thi một bản dựng nhiều lần để có thể đạt được thời gian xây dựng trung bình trong thời lượng bản dựng gỡ lỗi của Sunflower:

gradle-profiler --benchmark --project-dir . :app:assembleDebug
Chỉ lượt xem Khung hiển thị kết hợp và Compose Chỉ Compose
Thời gian xây dựng trung bình 299,47 mili giây 399,09 mili giây 342,16 mili giây

Khi lần đầu 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ă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 để biế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, giảm 57 mili giây, khi quá trình di chuyển Sunflower sang Compose hoàn tất. Mức giảm này có thể là do một số yếu tố làm giảm chung thời gian xây dựng, 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 nhờ quá trình biên dịch mã Compose. Tuy nhiên, bạn cần cân nhắc những sự đánh đổi này với lợi ích của Compose, đặc biệt là về việc tăng năng suất của nhà phát triển khi sử dụng Compose. Ví dụ: nhóm Cửa hàng Play nhận thấy rằng việc viết giao diện người dùng yêu cầu ít mã hơn nhiều, đôi khi lên tới 50%, từ đó 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 Sử dụng Compose cho nhóm.

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 trong thời gian chạy trong Jetpack Compose để giúp bạn hiểu được sự khác biệt về hiệu suất giữa Jetpack Compose 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 chỉ kết hợp lại các phần cần cập nhật. Hãy đọc thêm về điều này trong tài liệu về Vòng đời của thành phần kết hợpcác giai đoạn trong Jetpack Compose.

Hồ sơ cơ sở

Hồ sơ cơ sở là một cách rất hiệu quả để 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à các bước biên dịch đúng thời điểm (JIT) cho các đường dẫn mã đi kèm.

Thư viện Jetpack Compose bao gồm 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 của mình để 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. Hơn nữa, chủ sở hữu View tuỳ chỉnh cần triển khai logic tường minh để 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 tường minh 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 mà thông tin được ghi vào cấu trúc theo cách có thể phát lại. Điều này giúp giảm bớt hoạt động theo dõi trạng thái, phân bổ bộ nhớ và lệnh gọi lại rõ ràng chỉ cho các thành phần kết hợp yêu cầu các tính năng đã nêu thay vì yêu cầu chúng bằng tất cả các phần mở rộng của một loại View nhất định.

Ngoài ra, Compose còn cung cấp tính năng 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 thay đổi.

Nhiều thẻ bố cục

ViewGroup truyền thống có nhiều tính biểu đạt trong các API đo lường và API bố cục, khiến chúng dễ dàng phải truyền bố cục nhiều lần. 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 truyền một bố cục cho tất cả các thành phần kết hợp 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 phép đo, Compose có các phép đo 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ì bố cục được viết bằng Kotlin và được biên dịch như phần còn lại của ứng dụng.

Compose Điểm chuẩn

Trong Jetpack Compose 1.0, hiệu suất của một ứng dụng ở chế độ debugrelease 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 suất 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 đối tượng 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ượt hồi quy có thể xảy ra. Ví dụ: hãy xem cột điểm chuẩn cho lườitrang tổng quan của cột đó để 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 lợi từ Zygote tải trước các lớp và đối tượng có thể vẽ của 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 biên dịch trước (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.