مقایسه سنجه های نوشتن و مشاهده

Jetpack Compose توسعه UI را سرعت می بخشد و توسعه Android را بهبود می بخشد . با این حال، در نظر بگیرید که چگونه افزودن Compose به یک برنامه موجود می‌تواند بر معیارهایی مانند اندازه APK، ساخت و عملکرد زمان اجرا تأثیر بگذارد.

اندازه APK و زمان ساخت

این بخش با نگاهی به برنامه نمونه Sunflower - برنامه‌ای که بهترین شیوه‌ها را با انتقال یک برنامه مبتنی بر View به Compose نشان می‌دهد، تأثیر آن بر اندازه APK و زمان ساخت را بررسی می‌کند.

اندازه APK

افزودن کتابخانه ها به پروژه شما اندازه APK آن را افزایش می دهد. نتایج زیر مربوط به APK نسخه کوچک شده هر پروژه با فعال کردن کوچک کردن منابع و کد ، با استفاده از حالت کامل R8 و اندازه‌گیری با استفاده از APK Analyzer است.

فقط بازدیدها نماهای ترکیبی و نوشتن فقط نوشتن
اندازه دانلود 2,252 کیلوبایت 3,034 کیلوبایت 2,966 کیلوبایت

هنگامی که برای اولین بار Compose را به Sunflower اضافه کردید، اندازه APK از 2252 کیلوبایت به 3034 کیلوبایت افزایش یافت - یک افزایش 782 کیلوبایتی . APK ایجاد شده شامل ساخت رابط کاربری با ترکیبی از Views و Compose بود. این افزایش قابل انتظار است زیرا وابستگی های اضافی به Sunflower اضافه شده است.

برعکس، وقتی Sunflower به یک برنامه فقط Compose منتقل شد، اندازه APK از 3,034 KB به 2,966 KB کاهش یافت - یک کاهش 68 KB . این کاهش به دلیل حذف وابستگی‌های View استفاده نشده، مانند AppCompat و ConstraintLayout بود.

ساخت زمان

افزودن Compose زمان ساخت برنامه شما را افزایش می‌دهد زیرا کامپایلر Compose موارد composable را در برنامه شما پردازش می‌کند. نتایج زیر با استفاده از ابزار مستقل gradle-profiler به دست آمد که یک بیلد را چندین بار اجرا می کند تا بتوان میانگین زمان ساخت را برای مدت زمان ساخت اشکال زدایی Sunflower به دست آورد:

gradle-profiler --benchmark --project-dir . :app:assembleDebug
فقط بازدیدها نماهای ترکیبی و نوشتن فقط نوشتن
میانگین زمان ساخت 299.47 میلی‌ثانیه 399.09 میلی‌ثانیه 342.16 میلی‌ثانیه

زمانی که برای اولین بار Compose را به Sunflower اضافه کردید، میانگین زمان ساخت از 299 میلی‌ثانیه به 399 میلی‌ثانیه افزایش یافت - یک افزایش 100 میلی‌ثانیه . این مدت به این دلیل است که کامپایلر Compose وظایف اضافی را برای تبدیل کد Compose تعریف شده در پروژه انجام می دهد.

برعکس، زمانی که مهاجرت Sunflower به Compose کامل شد، میانگین زمان ساخت به 342 میلی‌ثانیه کاهش یافت، یعنی 57 میلی‌ثانیه کاهش . این کاهش را می‌توان به عوامل متعددی نسبت داد که در مجموع زمان ساخت را کاهش می‌دهند، مانند حذف اتصال داده‌ها ، انتقال وابستگی‌هایی که از kapt به KSP استفاده می‌کنند، و به‌روزرسانی چندین وابستگی به آخرین نسخه‌هایشان.

خلاصه

پذیرش Compose به طور موثر اندازه APK برنامه شما را افزایش می دهد و همچنین عملکرد زمان ساخت برنامه شما را به دلیل فرآیند کامپایل کردن کد Compose افزایش می دهد. با این حال، این معاوضه ها باید با مزایای Compose سنجیده شوند، به ویژه در مورد افزایش بهره وری توسعه دهندگان هنگام پذیرش Compose. به عنوان مثال، تیم Play Store دریافت که نوشتن UI به کد بسیار کمتری نیاز دارد، گاهی اوقات تا 50٪ ، در نتیجه بهره‌وری و قابلیت نگهداری کد افزایش می‌یابد.

می توانید مطالعات موردی بیشتری را در Adopt Compose for Teams بخوانید.

عملکرد زمان اجرا

این بخش موضوعات مربوط به عملکرد زمان اجرا در Jetpack Compose را پوشش می دهد تا به درک نحوه مقایسه Jetpack Compose با عملکرد سیستم View و نحوه اندازه گیری آن کمک کند.

بازسازی های هوشمند

وقتی بخش‌هایی از UI نامعتبر است، Compose سعی می‌کند فقط بخش‌هایی را که باید به‌روزرسانی شوند، دوباره ترکیب کند. در مستندات مراحل Composable و Jetpack Compose درباره این مورد بیشتر بخوانید.

پروفایل های پایه

نمایه های خط پایه یک راه عالی برای سرعت بخشیدن به سفرهای معمول کاربران هستند. گنجاندن نمایه خط پایه در برنامه شما می‌تواند سرعت اجرای کد را تا حدود 30 درصد از اولین راه‌اندازی با پرهیز از مراحل تفسیر و تدوین به‌موقع (JIT) برای مسیرهای کد گنجانده شده بهبود بخشد.

کتابخانه Jetpack Compose شامل نمایه خط پایه خودش است و وقتی از Compose در برنامه خود استفاده می‌کنید، به‌طور خودکار این بهینه‌سازی‌ها را دریافت می‌کنید. با این حال، این بهینه‌سازی‌ها فقط بر مسیرهای کد در کتابخانه Compose تأثیر می‌گذارند، بنابراین توصیه می‌کنیم یک نمایه خط پایه به برنامه خود اضافه کنید تا مسیرهای کد خارج از Compose را پوشش دهد.

مقایسه با سیستم View

Jetpack Compose پیشرفت های زیادی نسبت به سیستم View دارد. این پیشرفت ها در بخش های بعدی توضیح داده شده است.

همه چیز View را گسترش می دهد

هر View که روی صفحه نمایش داده می‌شود، مانند TextView ، Button ، یا ImageView ، به تخصیص حافظه، ردیابی وضعیت صریح و تماس‌های مختلف برای پشتیبانی از همه موارد استفاده نیاز دارد. علاوه بر این، مالک View سفارشی باید منطق صریح را پیاده‌سازی کند تا از ترسیم مجدد در مواقعی که لازم نیست-مثلاً برای پردازش داده‌های تکراری- جلوگیری کند.

Jetpack Compose به چند روش به این موضوع می پردازد. Compose اشیاء صریح قابل به‌روزرسانی برای طراحی نماها ندارد. عناصر UI توابع ساده قابل ترکیبی هستند که اطلاعات آنها به روشی قابل پخش مجدد در ترکیب نوشته می شود. این کمک می کند تا ردیابی وضعیت صریح، تخصیص حافظه، و پاسخ به تماس ها را به جای نیاز به همه برنامه های افزودنی از یک نوع View ، فقط به مواردی که به ویژگی های گفته شده نیاز دارند، کاهش دهید.

علاوه بر این، Compose ترکیب‌های مجدد هوشمندی را ارائه می‌کند و اگر نیازی به ایجاد تغییرات ندارید، نتیجه ترسیم شده قبلی را دوباره پخش می‌کند.

پاس های طرح بندی متعدد

ViewGroup‌های سنتی در اندازه‌گیری و APIهای طرح‌بندی خود بیانگر زیادی دارند که آن‌ها را مستعد چندین پاس‌های طرح‌بندی می‌کند. اگر در نقاط تودرتوی خاصی در سلسله‌مراتب view انجام شود، این پاس‌های طرح‌بندی چندگانه می‌توانند باعث کار نمایی شوند.

Jetpack Compose از طریق قرارداد API خود ، یک layout pass را برای همه layout composable ها اعمال می کند. این به Compose اجازه می‌دهد تا درخت‌های عمیق رابط کاربری را به‌طور مؤثر مدیریت کند. اگر چندین اندازه گیری لازم باشد، Compose دارای اندازه گیری های ذاتی است.

مشاهده عملکرد راه اندازی

هنگام نمایش یک طرح بندی خاص برای اولین بار، سیستم View باید طرح بندی های XML را افزایش دهد. این هزینه در Jetpack Compose ذخیره می‌شود زیرا طرح‌بندی‌ها در Kotlin نوشته شده‌اند و مانند بقیه برنامه‌های شما کامپایل می‌شوند.

بنچمارک نوشتن

در Jetpack Compose 1.0، تفاوت های قابل توجهی بین عملکرد یک برنامه در حالت های debug و release وجود دارد. برای زمان‌بندی نماینده، همیشه به‌جای debug هنگام نمایه‌سازی برنامه خود از نسخه release استفاده کنید.

برای بررسی عملکرد کد Jetpack Compose خود، می‌توانید از کتابخانه Jetpack Macrobenchmark استفاده کنید. برای یادگیری نحوه استفاده از آن با Jetpack Compose، به پروژه MacrobenchmarkSample مراجعه کنید.

تیم Jetpack Compose همچنین از Macrobenchmark برای گرفتن هرگونه رگرسیونی که ممکن است رخ دهد استفاده می کند. برای مثال، معیار ستون تنبل و داشبورد آن را برای ردیابی رگرسیون ها ببینید.

نوشتن مشخصات نصب

از آنجایی که Jetpack Compose یک کتابخانه جداسازی‌شده است، از Zygote که کلاس‌ها و کشش‌های UI Toolkit سیستم View را از قبل بارگذاری می‌کند، سودی ندارد. Jetpack Compose 1.0 از نصب نمایه برای ساخت‌های انتشار استفاده می‌کند. نصب‌کننده‌های نمایه به برنامه‌ها اجازه می‌دهند تا کدهای حیاتی را مشخص کنند تا در زمان نصب زودتر کامپایل شوند (AOT). قوانین نصب نمایه کشتی را بنویسید که زمان راه‌اندازی و جابجایی را در برنامه‌های Compose کاهش می‌دهد.

{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {% آخر کلمه %}