Lợi ích về hiệu suất khi sử dụng Kiểu

Theo thiết kế, Kiểu hoạt động trong giai đoạn bố cục và vẽ của Compose. Điều này giúp bạn không cần tạo đối tượng sửa đổi dựa trên lambda vì Kiểu luôn bỏ qua giai đoạn thành phần.

Các giai đoạn của Compose và nơi chạy Kiểu
Hình 1. Các giai đoạn của Compose và nơi chạy Kiểu.

Việc cải thiện hiệu suất trên các hệ số điều chỉnh đến từ 3 điểm tối ưu hoá chính:

  • Dịch pha: Các kiểu thường nhắm đến giai đoạn Vẽ. Khi một giá trị thay đổi, Compose chỉ vô hiệu hoá giai đoạn bị ảnh hưởng (ví dụ: Vẽ lại) thay vì kích hoạt toàn bộ quá trình Kết hợp lại hoặc Bố trí lại.
  • Phân bổ trì hoãn: Các kiểu trì hoãn việc phân bổ tài nguyên ảnh động cho đến khi ảnh động thực sự bắt đầu. Điều này giúp giảm lượng công việc cần thiết trong quá trình kết hợp ban đầu.
  • Giảm chi phí chung của đối tượng: Các đối tượng sửa đổi được liên kết sẽ phân bổ một đối tượng cho mọi thuộc tính (ví dụ: khoảng đệm, đường viền). Các kiểu sử dụng một lambda duy nhất để áp dụng nhiều thuộc tính, giúp giảm đáng kể việc phân bổ bộ nhớ. Nếu một Kiểu được xác định trong một giao diện, thì lambda đó sẽ được chia sẻ trên tất cả các thành phần sử dụng giao diện đó.

Bảng sau đây cho thấy kết quả minh hoạ của một điểm chuẩn hiệu suất nội bộ cho Compose 1.11.0-alpha06 của Styles, so với một cách triển khai trong Compose mà không có Styles.

Thử nghiệm basic_box_border_change làm nổi bật điểm mạnh của hệ thống kiểu trong việc tránh phân bổ nhiều đối tượng sửa đổi trong quá trình cập nhật thuộc tính, dẫn đến việc giảm đáng kể khoảng 77% số lượt phân bổ và giảm khoảng 59% thời gian.

Phương thức kiểm thử

Nội dung mô tả

Thay đổi thời gian

Thay đổi về việc phân bổ

basic_box_border_change

Chuyển đổi màu đường viền của một Box để đo lường hiệu suất cập nhật.

-59,91%

-77,22%

input_state_basic_box

So sánh các trạng thái di chuột/lấy tiêu điểm/nhấn dựa trên kiểu với việc thu thập trạng thái tương tác theo cách thủ công.

-5,24%

-14,72%

basic_box

Đo lường bố cục và thành phần ban đầu của một Box có 5 đối tượng sửa đổi được liên kết.

-4,78%

-6,60%

basic_text

Kết xuất 5 thành phần BasicText bằng các chuỗi được mã hoá cứng.

Hơn 0,62%

+2,41%

basic_text_provided_color

So sánh việc đặt màu văn bản thông qua một kiểu với việc sử dụng CompositionLocalProvider.

+5,86%

+9,82%