إعادة بناء Duolingo على Android باستخدام مكتبات MVVM وJetpack

Duolingo هو تطبيق تعلُّم اللغات الأكثر رواجًا على مستوى العالم، لأنّه تمت إدارته وجعل ميزاته سهلة وممتعة بالنسبة إلى المستخدمين في الماضي. تتطلّب هذه التجربة اللغوية المرحة تدفقًا مستمرًا من الميزات والتجارب الجديدة إلى جانب تطبيق يعمل بسلاسة ويقدّم كل هذه الميزات. بالنسبة إلى Duolingo، قد يؤدي تثبيت تطبيق غير مستجيب على جهاز في أي مكان في العالم إلى شعور المتعلم بالإحباط. وهذا يدفعهم إلى التميز في التطبيق، وخصوصًا على أجهزة Android التي يستخدمها ستين في المائة من المتعلمين، بما في ذلك الرئيس التنفيذي، الذي يتتبّع التطبيق من هاتف مستوى المبتدئين. ولذلك، عندما لاحظ فريق تطوير تطبيقات Android في Duolingo زيادة في أخطاء "التطبيق لا يستجيب"، وتم تجاهل الإطارات، بل وتلقّى شكاوى مكتوبة بخط اليد، اتخذوا إجراءً على الفور.

وسرعان ما اكتشفوا مصدر مشكلات أداء التطبيق: حيث لم تكن بنية البرامج الحالية تتوسع بشكل جيد مع نمو فريقهم. أدّت التحديثات الضرورية إلى تراجع كبير في أداء التطبيق. وكان مطوّرو التطبيق يخصّصون وقتًا أطول لإصلاح الأخطاء، ويخصّصون وقتًا أقل لتسليم ميزات جديدة تؤدّي إلى تحقيق الأرباح. بدأت بنية برامجهم القديمة في أن تصبح عقبة غير مقبولة - عليها، وسرعة فريقهم، وقبل كل شيء، على تجربة المستخدمين. لقد احتاجت إلى إعادة إنشاء قاعدة الرموز الخاصة بها من الألف إلى الياء.

كيفية التنفيذ

في البداية، كان الفريق ممزقًا. هل يجب أن تكون هذه أولويتهم الوحيدة الآن؟ شعرت إحدى المجموعات بأهمية الاستمرار في توفير ميزات جديدة وزيادة الأرباح، بينما رأت المجموعة الأخرى أنّ تركيز كل اهتمامها على إعادة تشغيل Android كان المضي قدمًا. وفي نهاية المطاف، توصلوا إلى إجماع أن الجهد المتزايد المبذول لمكافحة الانحدارات قد تسبب في عرقلة خارطة الطريق تمامًا. كان عليهما الانخراط في كل شيء.

واستقر الفريق على حل يتزايد رواجه. قرّر الفريق إعادة كتابة تطبيقه باستخدام Model-View-ViewModel، وهو نمط برمجي توفّره Google يتيح للمطوّرين تبسيط بنية التطبيق من خلال الفصل بين المخاوف بوضوح. وباستخدام MVVM، استطاعوا فصل تطوير واجهة المستخدم الرسومية (العرض) عن تطوير منطق العمل (النموذج). ويمكنهم وضع أنماط واضحة ومتفق عليها، مما يسهل مواءمة نهجهم مع الميزات الجديدة، وإشراك المطورين القادمين.

إنّ تقسيم كل ميزة إلى وحدة نموذجية خاصة بها سمح للفريق باستعادة الإنتاجية بسرعة، إذ تمكّن من تعيين مجموعات صغيرة للعمل على كل ميزة بالتوازي، ما يؤدي إلى زيادة السرعة مع تقليل الأخطاء.

وقد طبّقوا هذه البنية الجديدة باستخدام مكتبات من Jetpack على Android، بما في ذلك Dagger وHilt، لمساعدتهم على كتابة الرموز البرمجية التي تعمل باستمرار على جميع إصدارات Android وأجهزته. وقد مكنتهم هاتان الإضافتان من إنشاء ميزات مُغلّفة بشكل أفضل واستخدام الوحدات المضمَّنة في Android بكفاءة أكبر.

النتائج

يؤدي هذان الأداء إلى تحسين تجربة المتعلّمين بشكل كبير على Android وخاصةً على أجهزة المبتدئين. كما أدى ذلك إلى تطبيق أكثر استجابة يتميز برسوم متحركة أكثر سلاسة على الأجهزة الرئيسية. انخفضت النسبة اليومية لأخطاء "التطبيق لا يستجيب" أو أخطاء ANR بنسبة 41%. إنّ النسبة المئوية للوقت الذي انخفض فيه التطبيق عن عدد اللقطات المستهدَف في الثانية انخفض بنسبة 28%. والأهم من ذلك، شهد المستخدمون زيادة بنسبة 40٪ في السرعة عند التمرير عبر الشاشات الرئيسية.

تضع يدها ملاحظات ككاتبة تشير إلى أخطاء ANR بنسبة% 41 ومعدل عرض إطارات محسَّن بنسبة% 28 وتجربة أسرع بنسبة% 40.


استغرقت إعادة التشغيل بالكامل ثمانية أسابيع وساهمت في جعل التطبيق أكثر جاذبية ومتعة لجميع متعلّمي Duolingo. وعلى مدى الأشهر الستة التي تلت تطبيق هذا التغيير، لم يسجّل الفريق أي تراجع كبير في الأداء، ما سمح له بالتركيز مرة أخرى على ميزات تحقيق أرباح الشحن. وقد أتى قرار تركيز جهود الفريق على الجودة بجدية.

بفضل التزام Duolingo بهدف تحقيق رسالتهم، أصبح التطبيق الأفضل في العالم في مجال تعلُّم اللغات. إنّ التزامهم بالتميّز في التطبيقات من خلال توفير تجارب تعليمية متطوّرة بدون المساس بتسهيل الاستخدام هو ما ساهم في عدم نجاح التطبيقات.

البدء

إذا كنت تريد التعمق في التفاصيل الجوهرية لكيفية دمج Duolingo لمكتبات Jetpack، والطريقة التي ساهمت بها ميزة Model-View-ViewModel في تحسين تطبيقها، يمكنك الاطّلاع على دراسة الحالة الفنية للمطوّرين.