بهینهسازی مبتنی بر پروفایل برای شروع اجرای اپلیکیشنهای اندروید
ما زمان شروع سرد (cold start) اندروید خود را از ۱.۲ ثانیه به ۳۸۰ میلیثانیه کاهش دادیم.
اکثر اپلیکیشنها در اولین اجرا، در کندترین حالت کامپایل اجرا میشوند. اندروید زمانی که کاربر برای اولین بار اپلیکیشن شما را نصب میکند، از حالت "interpret-only" استفاده میکند. این موضوع باعث کند شدن زمان شروع برنامه میشود. سیستم تنها در زمانهای بیکاری (idle time) در مراحل بعدی، کدها را بهینه میکند.
شما میتوانید این مشکل را با استفاده از یک فرآیند سه مرحلهای حل کنید.
۱. تولید Baseline Profiles پروفایلهای پایه (Baseline Profiles) به سیستم میگویند که کدام کلاسها باید در زمان نصب کامپایل شوند. از Macrobenchmark برای ایجاد این پروفایلها در خط لوله CI خود استفاده کنید. پروفایلهای ما تنها ۱۲٪ از متدها را پوشش دادند اما ۹۴٪ از زمان شروع برنامه را مدیریت کردند.
۲. فعالسازی DEX Layout Reordering این کار تنها با یک خط کد در فایل properties مربوط به Gradle انجام میشود. این دستور به R8 میگوید که کلاسهای مربوط به شروع برنامه را در فایل DEX شما در کنار هم گروهبندی کند. این کار باعث کاهش ۳۰ تا ۵۰ درصدی Page Faultها میشود. وقتی کلاسها در کنار هم قرار میگیرند، سیستم دادههای بیهوده کمتری را از دیسک بارگذاری میکند.
۳. استفاده از Cloud Profiles گوگل Play پروفایلها را از کاربران جمعآوری کرده و برای نصبهای جدید ارسال میکند. این کار باعث افزایش مضاعف سرعت شما میشود.
نتایج تستهای ما:
- بدون پروفایل: ۱,۲۰۴ میلیثانیه شروع سرد
- فقط Baseline Profile: ۶۲۰ میلیثانیه شروع سرد
- Baseline + DEX reorder: ۴۴۵ میلیثانیه شروع سرد
- Baseline + DEX reorder + Cloud: ۳۸۰ میلیثانیه شروع سرد
نکات مهم برای گردش کار (workflow) شما:
- برای هر نسخه (release)، پروفایلها را در CI تولید کنید. پروفایلهای قدیمی (stale) باعث کاهش عملکرد میشوند.
- پس از اجرای R8، پروفایلها را مجدداً تولید کنید. R8 ساختار کد شما را تغییر میدهد.
- در Macrobenchmark از حالت کامپایل "Partial" استفاده کنید. حالت "Full" نتایج کاذبی ارائه میدهد که بازتابدهنده تجربه واقعی کاربران نیست.
- روی نسخههای مختلف اندروید تست کنید. میزان بهبود عملکرد در سطوح مختلف API (قدیمی و جدید) متفاوت است.
این لایهها را روی هم قرار دهید تا اپلیکیشنهای سریعتری بسازید.
منبع: https://dev.to/software_mvp-factory/profile-guided-optimization-for-android-app-startup-2i7a