Refactor های Duolingo در اندروید با کتابخانه های MVVM و Jetpack

Duolingo محبوب‌ترین برنامه یادگیری زبان در جهان است زیرا توانسته چیزی را که مردم در گذشته دلهره‌آور می‌دانستند، آسان و سرگرم‌کننده کند. این تجربه زبانی به جریانی ثابت از ویژگی‌ها و آزمایش‌های جدید نیاز دارد - و یک برنامه روان که بتواند همه آنها را ارائه دهد. برای Duolingo، یک برنامه بدون پاسخ در دستگاهی در هر نقطه از جهان می تواند به معنای یک یادگیرنده بالقوه دلسرد باشد. این آنها را متعهد به برتری برنامه‌ها می‌کند، به‌ویژه در دستگاه‌های اندرویدی که شصت درصد زبان‌آموزانشان از آن‌ها استفاده می‌کنند، از جمله مدیر عامل آن‌ها، که برنامه را از یک تلفن سطح پایه پیگیری می‌کند. و بنابراین، هنگامی که تیم توسعه اندروید Duolingo متوجه افزایش خطاهای «App not Responding» شد، فریم‌ها را رها کردند - و حتی شکایات دست‌نویس دریافت کردند - بلافاصله وارد عمل شدند.

آنها به زودی منبع مشکلات عملکرد برنامه را کشف کردند: معماری نرم افزار موجود با رشد تیم آنها به خوبی مقیاس نمی شد. به‌روزرسانی‌های ضروری باعث رگرسیون‌های عملکرد دردناکی در برنامه می‌شدند. توسعه دهندگان آنها زمان بیشتری را به رفع اشکالات و کمتر به ارسال ویژگی های جدید درآمدزا اختصاص می دادند. معماری نرم افزار منسوخ شده آنها شروع به تبدیل شدن به یک کشش غیرقابل قبول کرده بود - بر آنها، سرعت تیم آنها، و مهمتر از همه، تجربه کاربرانشان. آنها نیاز داشتند که پایگاه کد خود را از ابتدا بازسازی کنند.

چگونه این کار را انجام دادند

در ابتدا تیم پاره شد. آیا اکنون این باید تنها اولویت آنها باشد؟ یک گروه احساس کردند که ادامه ارسال ویژگی های جدید و افزایش درآمد مهم تر است، در حالی که گروه دیگر معتقد بودند که تمرکز تمام توجه خود بر راه اندازی مجدد اندروید راه رو به جلو است. سرانجام، آنها به اجماع رسیدند که تلاش فزاینده برای مبارزه با رگرسیون خطر از بین بردن کامل نقشه راه آنها را در پی دارد. آنها مجبور بودند آل-این بروند.

تیم به یک راه حل رو به افزایش محبوبیت رسید. آن‌ها تصمیم گرفتند برنامه خود را با استفاده از Model-View-ViewModel بازنویسی کنند، یک الگوی نرم‌افزاری که توسط گوگل پشتیبانی می‌شود و به توسعه‌دهندگان اجازه می‌دهد تا معماری برنامه را با ایجاد تفکیک واضح نگرانی‌ها ساده‌سازی کنند. با MVVM، آنها می توانند توسعه رابط کاربری گرافیکی (نما) را از توسعه منطق تجاری (مدل) جدا کنند. آن‌ها می‌توانند الگوهای واضح و توافق‌شده‌ای را ایجاد کنند و همسو کردن رویکردشان با ویژگی‌های جدید و توسعه‌دهندگان ورودی را آسان‌تر کند.

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

آنها این معماری جدید را با کتابخانه‌هایی از Jetpack Android، از جمله Dagger و Hilt ، پیاده‌سازی کردند تا به آنها کمک کند کدی بنویسند که به طور مداوم در نسخه‌ها و دستگاه‌های Android کار کند. این دو افزوده به آن‌ها امکان می‌دهد ویژگی‌های محصورشده بهتری ایجاد کنند و از ماژول‌های داخلی اندروید به طور مؤثرتری استفاده کنند .

نتایج

این عملکرد به طور قابل توجهی باعث بهبود تجربه یادگیرندگان در Android و به ویژه در دستگاه های سطح ابتدایی می شود. آنها همچنین منجر به یک برنامه پاسخگوتر با انیمیشن های روان تر در دستگاه های پرچمدار شدند. نرخ روزانه "App Not Responsing" یا ANR 41٪ کاهش یافته است. درصد زمانی که برنامه به زیر نرخ فریم هدف خود می‌رسد، 28 درصد کاهش یافته است. مهم‌تر از همه، کاربران آن‌ها هنگام پیمایش در صفحه کلید، 40 درصد افزایش سرعت را تجربه کردند.

دست‌هایی که یادداشت‌هایی را در دست گرفته‌اند، ۴۱ درصد ANR کمتر، ۲۸ درصد نرخ فریم بهبود یافته و ۴۰ درصد تجربه سریع‌تر را می‌خوانند.


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

تعهد Duolingo به مأموریت خود، آنها را به برترین برنامه جهان در فضای یادگیری زبان تبدیل کرد. تعهد آنها به برتری برنامه - ایجاد تجربیات آموزشی پیشرفته بدون به خطر انداختن دسترسی - چیزی است که آنها را در آنجا نگه داشته است.

شروع کنید

اگر دوست دارید در مورد نحوه ادغام کتابخانه های Jetpack توسط Duolingo و اینکه Model-View-ViewModel برنامه خود را بهبود بخشیده است غواصی کنید، مطالعه موردی فنی ما را برای توسعه دهندگان بخوانید.