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 Android phát triển. Tuy nhiên, hãy cân nhắc cách việc thêm Compose vào một ứng dụng hiện có có thể ảnh hưởng đến các chỉ số như kích thước APK của ứng dụng, và hiệu suất của bản dựng và thời gian chạy.

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 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ác kết quả sau đây dành cho APK phát hành rút gọn của mỗi dự án có tài nguyên và mã bật tính năng rút gọ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ả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. APK đã tạo bao gồm bản dựng giao diện người dùng với kết hợp Views và Compose. Mức tăng này có thể do mức tăng thêm các phần phụ thuộc 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 2.966 KB, giảm 68 KB. Mức giảm này là do để xoá các phần phụ thuộc Khung hiển thị không dùng đến, chẳng hạn như AppCompatConstraintLayout

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

Việc thêm Compose sẽ làm tăng thời gian xây dựng ứng dụng làm 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. Đã thu được cá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 để thời gian xây dựng trung bình có thể đạt được trong thời lượng bản gỡ lỗi của Hoa hướng dương:

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 thêm Compose vào Sunflower lần đầu tiên, 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 để chuyển đổi mã Compose đã 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 vào một số yếu tố làm giảm chung thời gian xây dựng, chẳng hạn như xoá dữ liệu liên kết, 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 vào phiên bản mới nhất.

Tóm tắt

Việc triển khai 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 của mã Compose. Tuy nhiên, những sự đánh đổi này cần được xem xét so 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 đã tìm thấy việc viết giao diện người dùng đòi hỏi ít mã hơn, đôi khi lên tới 50%, do đó giúp tăng năng suất và khả năng bảo trì của 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 đề cập đến các chủ đề liên quan đến hiệu suất thời gian chạy trong Jetpack Compose để giúp tìm hiểu cách so sánh Jetpack Compose với hiệu suất của hệ thống Khung hiển thị, và cách đo lường.

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 tử các phần cần cập nhật. Đọc thêm về điều này trong Vòng đời của thành phần kết hợpJetpack Compose tài liệu.

Hồ sơ cơ sở

Hồ sơ cơ sở là một một cách hiệu quả để tăng tốc các hành trình thông thường của người dùng. Bao gồm một Đường cơ sở Hồ sơ trong ứng dụng có thể cải thiện tốc độ thực thi mã khoảng 30% kể từ lần đầu khởi chạy 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 đường dẫn mã đi kèm.

Thư viện Jetpack Compose có sẵn Hồ sơ cơ sở riêng và bạn sẽ tự động nhận được những điểm tối ưu hoá này khi bạn sử dụng Compose trong ứng dụng. Tuy nhiên, các biện pháp 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, chúng tôi bạn nên thêm Hồ sơ cơ sở vào để xác định 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 nhằm ngăn chặn thao tác vẽ lại khi thực tế không phải như vậy cần thiết (ví dụ: để 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 thuộc tính rõ ràng các đối tượng có thể cập nhật để vẽ khung hiển thị. Thành phần 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 thông tin được ghi vào bản sáng tác theo cách có thể phát lại. Điều này giúp cắt giảm hoạt động theo dõi trạng thái rõ ràng, phân bổ bộ nhớ và gọi lại cho thành phần kết hợp yêu cầu các tính năng nói trên thay vì yêu cầu 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ả hiển thị trước đó nếu bạn không cần thay đổi.

Nhiều thẻ bố cục

ViewGroup truyền thống thể hiện rất nhiều nội dung về số lượng đo lường và bố cục Các API khiến chúng dễ dàng 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 một lượ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 hiệu quả xử lý các cây giao diện người dùng sâu. Nếu cần nhiều phép đo, Compose có đo lường 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 là đượ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 làm để sử dụng công cụ 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ỗi hồi quy có thể xảy ra. Ví dụ: hãy xem điểm chuẩn cho cột lazytrang tổng quan của báo cáo để 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 (có thể tải trước các phiên bản của hệ thống Khung hiển thị) Các lớp và đối tượng có thể vẽ của Bộ công cụ giao diện người dùng. Jetpack Compose 1.0 sử dụng hồ sơ cho 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 khi chạy (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.