مزایای عملکرد با Styles

طبق طراحی، Styleها در مرحله طرح‌بندی و ترسیم Compose عمل می‌کنند. این امر از نیاز به ایجاد اصلاح‌کننده‌های مبتنی بر لامبدا جلوگیری می‌کند، زیرا Styleها همیشه از مرحله ترکیب صرف‌نظر می‌کنند.

مراحل نوشتن و محل اجرای استایل‌ها
شکل ۱. مراحل نوشتن و محل اجرای استایل‌ها

بهبود عملکرد نسبت به اصلاح‌کننده‌ها از سه بهینه‌سازی اصلی ناشی می‌شود:

  • تغییر فاز : سبک‌ها اغلب فاز Draw را هدف قرار می‌دهند. وقتی مقداری تغییر می‌کند، Compose به جای اینکه یک Recomposition یا Relayout کامل را فعال کند، فقط فاز آسیب‌دیده (مثلاً Redraw) را نامعتبر می‌کند.
  • تخصیص تنبل : سبک‌ها تخصیص منابع انیمیشن را تا زمان شروع واقعی انیمیشن به تعویق می‌اندازند. این کار باعث کاهش کار مورد نیاز در طول ترکیب اولیه می‌شود.
  • کاهش سربار شیء : اصلاح‌کننده‌های زنجیره‌ای برای هر ویژگی (مثلاً padding، border) یک شیء اختصاص می‌دهند. استایل‌ها از یک لامبدا برای اعمال چندین ویژگی استفاده می‌کنند و تخصیص حافظه را به میزان قابل توجهی کاهش می‌دهند. اگر یک استایل در یک تم تعریف شود، آن لامبدا در تمام کامپوننت‌هایی که از آن تم استفاده می‌کنند، به اشتراک گذاشته می‌شود.

جدول زیر نتایج گویای یک معیار عملکرد داخلی برای Compose 1.11.0-alpha06 از Styles را در مقایسه با پیاده‌سازی آن در Compose بدون Styles نشان می‌دهد.

تست basic_box_border_change قدرت سیستم استایل را در جلوگیری از تخصیص چندین شیء اصلاح‌کننده در حین به‌روزرسانی ویژگی‌ها برجسته می‌کند، که منجر به کاهش چشمگیر حدود ۷۷٪ در تخصیص‌ها و حدود ۵۹٪ در زمان می‌شود.

روش آزمون

توضیحات

تغییر زمان

تغییر تخصیص

تغییر_حاشیه_مربع_پایه

رنگ حاشیه یک Box را برای اندازه‌گیری عملکرد به‌روزرسانی تغییر می‌دهد.

-۵۹.۹۱٪

-۷۷.۲۲٪

ورودی_حالت_پایه_جعبه

حالت‌های شناور/فوکوس/فشار دادن مبتنی بر سبک را با حالت‌های تعامل دستی مقایسه می‌کند.

-۵.۲۴٪

-۱۴.۷۲٪

جعبه_پایه

ترکیب و طرح اولیه یک Box با پنج اصلاح‌کننده زنجیری را اندازه‌گیری می‌کند.

-۴.۷۸٪

-۶.۶۰٪

متن_پایه

پنج کامپوننت BasicText را با رشته‌های کدگذاری‌شده رندر می‌کند.

+۰.۶۲٪

+۲.۴۱٪

متن_پایه_ارائه_رنگ

تنظیم رنگ متن از طریق یک استایل را با استفاده از CompositionLocalProvider مقایسه می‌کند.

+۵.۸۶٪

+۹.۸۲٪