برنامه نویسی

RecyclerView در مقابل LazyColumn – انجمن DEV

من حدود 6 تا 8 ماه است که با Jetpack Compose کار می کنم، اما هرگز تفاوت عملکرد بین هر دو فناوری را بررسی نکرده ام، فقط از Google شنیدم که Compose بسیار بهتر از XML View است.

بنابراین، تصمیم گرفتم عملکردی را بین RecyclerView و LazyColumn آزمایش کنم.

درباره یک برنامه

برنامه یک کار آزمایشی معمولی “فهرست و جزئیات” را حل می کند 🙂 برنامه در 2 نوع (نوشتن و نمای XML) با همان UI ساخته شده است. و ما لیستی از کاربران را از GitHub REST API دریافت کردیم و توسط برخی از کاربران کلیک کنید و جزئیات کاربر را دریافت کنید … مثل همیشه…

من از هیچ بهینه سازی مانند DiffUtil برای RecyclerView یا derivedStateOf برای LazyColumn استفاده نمی کنم، می خواهم تفاوت را همانطور که هست ببینم.

اجازه دهید اسکرین شات های برنامه را آپلود نکنم، خیلی خسته کننده است. می توانید برنامه را از مخزن GitHub دریافت کنید

برای آزمایش از کتابخانه macrobenchmark، دستگاه – Samsung Galaxy A04s (SM-A047F-14) استفاده می کنم.

نتایج کوتاه

تستپارامترنمای XMLJetpack Compose
startup()timeToInitialDisplay (میانگین)769.5 میلی‌ثانیه1048.0 میلی‌ثانیه
scrollReposList()frameDurationCpu (P99)23.2 میلی‌ثانیه22.9 میلی‌ثانیه
frameOverrun (P99)19.8 میلی‌ثانیه23.6 میلی‌ثانیه
clickOnExpandedButton()frameDurationCpu (P99)67.7 میلی‌ثانیه61.4 میلی‌ثانیه
frameOverrun (P99)766.1 میلی‌ثانیه72.8 میلی‌ثانیه
clickToDetails()frameDurationCpu (P99)57.8 میلی‌ثانیه33.2 میلی‌ثانیه
frameOverrun (P99)2688.3 میلی‌ثانیه94.5 میلی‌ثانیه

خوب، ممکن است ببینید که همه نتایج مرتبط نیستند. مشکلی پیش آمد…
اشتباه 1 در clickOnExpandedButton() من خودم داخلش درست میکنم RecyclerView.Adapter کلاس بچه ها متاسفم، من تازه یادم رفته است که چگونه یک اکشن توسعه یافته زیبا با RecyclerView بسازم.
اشتباه 2 در clickToDetails()… من نمی دانم و ما فقط این را نادیده می گیریم.

اجازه بدید ببینم:

  • startup(): بوت سرد توسط Compose بسیار بدتر از XML است – بیش از 20٪
  • scrollReposList(): مدت زمان فریم یکسان است (تفاوت کمتر از 10٪ است). بیش از حد فریم – هر دو مقدار مثبت هستند و Compose 20٪ بدتر است. این بدان معناست که Compose کمی سریعتر فریم ایجاد می کند اما بعداً آن را روی صفحه نمایش نشان می دهد. نتیجه عجیب باید بررسی بشه…شاید بعدا…شاید هرگز 🙂

بیایید کمی عمیق تر به رندر فریم نگاه کنیم. و برای مقایسه من همان لحظه را از clickToDetails(). لحظه رندر کردن لیست با مخازن در صفحه جزئیات.

رندر فریم با Compose

رندر فریم با Compose

فریم رندر با نمای XML

فریم رندر با نمای XML

همانطور که می بینیم Compose رابط کاربری را کندتر نشان می دهد. یک لیست مخزن – 91.27 میلی‌ثانیه نوشتن در مقابل 71.95 میلی‌ثانیه نمای XML. اما یک انیمیشن (15.38 میلی‌ثانیه) در داخل همگام‌سازی یک طراح رقص در Compose وجود دارد.

نتیجه گیری

  • تفاوت زیادی در چکمه سرد وجود دارد. اما با نمایه های پایه قابل رفع است.
  • ما عملکرد فوق العاده، وای، شگفت انگیزی نداریم، اما به طور کلی برنامه ما با Compose کمی سریع تر و روان تر است.
  • بیش از حد به طور مستقیم به یک توسعه دهنده و نحوه بهینه سازی نماها یا توابع قابل ترکیب بستگی دارد.
  • تست های ابزاری XML View در مقابل Compose واقعا دردناک است.

در و می خواهم چه بگویم؟ من می خواهم از Compose استفاده کنم، بنابراین هرگز مجبور به نوشتن تست های ابزاردار برای XML نیستم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا