ShareChat ने फ़ीड स्क्रोल करने की सुविधा को 60% तक बेहतर बनाने के लिए, जंक की समस्याओं को ठीक किया

शुरुआती जानकारी

ShareChat, भारत का एक लोकप्रिय सोशल मीडिया प्लैटफ़ॉर्म है. इस पर लोग अपनी राय शेयर कर सकते हैं, अपनी ज़िंदगी के पल शेयर कर सकते हैं, और अपनी भाषा में नए दोस्त बना सकते हैं. इसमें चैट रूम और निजी मैसेज भेजने की सुविधा भी शामिल है. इससे लोग वीडियो, चुटकुले, गाने, और भाषा पर आधारित अन्य सोशल कॉन्टेंट शेयर कर सकते हैं. ShareChat, भारत में इंटरनेट क्रांति को आगे बढ़ाने के मिशन पर काम कर रहा है. यह इंटरनेट का इस्तेमाल करने वाले उन उपयोगकर्ताओं के लिए, इंटरनेट पर इंटरैक्ट करने के तरीके में बदलाव कर रहा है जिनके पास तकनीकी सुविधाओं की पहुंच कम होती है.

आंकड़ों में ऐप्लिकेशन

  • 10 करोड़ से ज़्यादा डाउनलोड
  • महीने के हिसाब से 18 करोड़ से ज़्यादा सक्रिय उपयोगकर्ता
  • 3 करोड़ 20 लाख से ज़्यादा कॉन्टेंट क्रिएटर्स
  • भारत की 15 अलग-अलग भाषाएँ
  • हर दिन ~15 लाख पोस्ट बनाई जाती हैं

चुनौती

ShareChat को हर दिन हज़ारों लोग इस्तेमाल करते हैं. इसलिए, ऐप्लिकेशन को लगातार नए फ़्रेम डिलीवर करने में समस्या आ रही थी. इससे, रिस्पॉन्स मिलने में ज़्यादा समय लग रहा था और लोगों के अनुभव पर बुरा असर पड़ रहा था.

इस वजह से, ऐप्लिकेशन में छूटे या देर से रेंडर हुए फ़्रेम की संख्या बढ़ गई. इसे “जंक” भी कहा जाता है. सभी उपयोगकर्ताओं को बेहतर अनुभव देने के लिए, जंक की इन समस्याओं को ठीक करना ज़रूरी था. इसके लिए, धीमे और फ़्रीज़ हुए फ़्रेम को बेहतर बनाना ज़रूरी था. इससे लोगों को ऐप्लिकेशन पर ज़्यादा समय बिताने में मदद मिलेगी. साथ ही, इससे यूज़र ऐक्टिविटी बढ़ेगी और Android Play Store पर ShareChat की रेटिंग बेहतर होगी.

उन्होंने यह कैसे किया

ShareChat ने Google की डेवलपर रिलेशंस टीम के साथ मिलकर काम किया. इससे, ऐप्लिकेशन पर धीमे और फ़्रीज़ हुए फ़्रेम (जंक) को बेहतर बनाकर, जंक को कम करने और कारोबार पर सकारात्मक असर डालने में मदद मिली. खास तौर पर, उन्होंने इन समस्याओं को बेहतर बनाने पर काम किया -

  • शेयर किया गया RecyclerView पूल - प्रोफ़ाइलिंग के दौरान यह देखा गया कि अलग-अलग व्यूहोल्डर बनाने में ज़्यादा समय लगता है. इस समय को कम करने के लिए, शेयर किया गया RecyclerView पूल बनाया गया. इससे मिलते-जुलते फ़ीड के लिए, व्यूहोल्डर बनाने की लागत को कम करने में भी मदद मिली.

  • लेआउट पास करने की बहुत ज़्यादा कोशिशेंl - प्रोफ़ाइलिंग से यह भी पता चला कि कुछ व्यूहोल्डर, requestLayouts के लिए अतिरिक्त अनुरोध कर रहे थे. ऑप्टिमाइज़ करने के लिए, कोड को अपडेट किया गया था. इससे हर बाइंड के बजाय, क्रिएशन के समय वैल्यू ली जाती है. इस तरह, requestLayout की अतिरिक्त लागत बचती है.

  • ओवरड्रॉ - लेयरिंग को कम करने के लिए लेआउट को आसान बनाया गया है. साथ ही, उन रंगों को हटाया गया है जिन्हें हर लेयर के लिए अलग-अलग सेट किया जा रहा था.

  • हैरारकी में बदलाव - कई स्क्रीन की प्रोफ़ाइलिंग और मैन्युअल तरीके से जांच करने पर, लंबे समय तक मुद्रास्फीति देखी गई. इस समस्या को हल करने के लिए, ConstraintLayout का इस्तेमाल करके, हैरारकी को फ़्लैट किया गया था.

  • व्यू में बहुत ज़्यादा बढ़ोतरी - प्रोफ़ाइलिंग के दौरान, कुछ व्यू के लिए बढ़ोतरी का समय ज़्यादा पाया गया. इन व्यू को व्यूस्टब में बदल दिया गया है.

  • यूज़र इंटरफ़ेस (यूआई) थ्रेड से ज़्यादा लोड वाले टास्क हटाना - प्रोफ़ाइलर का इस्तेमाल करके, कुछ ऐसी जगहों का पता लगाया गया जहां मुख्य थ्रेड पर ज़्यादा लोड वाले टास्क किए जा रहे थे. जैसे, हर recyclerView बाइंड की टैगिंग और स्टाइलिंग के साथ SpannableStringBuilder बनाना, BlurHash डिकोडिंग वगैरह. इन टास्क को यूज़र इंटरफ़ेस (यूआई) थ्रेड से हटाकर, बैकग्राउंड थ्रेड पर ले जाया गया.

  • Rx से Coroutine पर माइग्रेट करना - मेमोरी के इस्तेमाल की वजह से, GC को बार-बार कॉल करना पड़ता था. साथ ही, >100 RX थ्रेड के ज़रिए थ्रेड की संख्या बहुत ज़्यादा थी. इन समस्याओं को ठीक करने के लिए, कई इस्तेमाल के उदाहरणों को Coroutine पर ले जाया गया.

  • इमेज लोड करने के लिए Coil का इस्तेमाल करना - Glide को इमेज लोड करने में समस्याएं आ रही थीं. खास तौर पर, jetpack compose की मदद से बनाए गए कॉम्पोनेंट में. यह भी पता चला कि LazyColumn में इमेज लोड करते समय, रेंडरिंग थ्रेशोल्ड बार ज़्यादा था. इन वजहों से, इमेज लोड करने के लिए Coil का इस्तेमाल किया गया.

  • पुराने कोड को हटाना और उसे फिर से व्यवस्थित करना - पुराने कोड और एक्सपेरिमेंट को हटाने से, यूज़र इंटरफ़ेस (यूआई) से गैर-ज़रूरी छिपे हुए व्यू को हटाने में मदद मिली. साथ ही, कुछ स्क्रीन को बेहतर तरीके से फिर से लिखने में मदद मिली.

नतीजे

ShareChat ने बेहतर बनाने के लिए ज़रूरी पहलुओं का विश्लेषण किया और ऑप्टिमाइज़ेशन की रणनीतियों की पहचान की. इससे, वह उपयोगकर्ताओं के लिए बेहतर अनुभव दे पाया. साथ ही, उसने अपने ऐप्लिकेशन के लिए, Play Store पर मिलने वाली रेटिंग और यूज़र ऐक्टिविटी की दर को भी बढ़ाया. यहां ShareChat को मिले नतीजों की खास जानकारी दी गई है -

  • Play Store पर ‘धीरे-धीरे रेंडर होने वाले’ फ़्रेम में करीब 45% की कमी आई
  • Play Store पर ‘फ़्रीज़’ फ़्रेम में करीब 30% की कमी आई
  • हर 10 हज़ार फ़्रेम रेंडर करने पर, चैंकी फ़्रेम रेट की संख्या 10.72% से घटकर 3.98% हो गई
  • फ़ीड स्क्रोल करने की गतिविधि में 60% की बढ़ोतरी हुई
  • स्टोर पर कुल रेटिंग ~4.0 से बढ़कर 4.3 हो गई
  • पोस्ट के साथ लोगों के जुड़ाव में 10% की बढ़ोतरी हुई

“ShareChat का लक्ष्य, सबसे बेहतरीन सोशल मीडिया ऐप्लिकेशन बनना है. ऐसा ऐप्लिकेशन जो हमारे उपयोगकर्ताओं को पसंद आए. इसका मतलब यह भी है कि ऐप्लिकेशन की परफ़ॉर्मेंस के मामले में, हमें सबसे बेहतर बनना है. Google की डेवलपर रिलेशंस टीम के साथ मिलकर काम करने से, हमें उन डिवाइसों में सुधार करने में मदद मिली जिन्हें कम कॉन्फ़िगरेशन वाले उपयोगकर्ता सबसे ज़्यादा इस्तेमाल करते हैं. हमने परफ़ॉर्मेंस को बेहतर बनाने के सबसे सही तरीके और टूल सीखे. इनकी मदद से, फ़्रीज़ हुए फ़्रेम, जंक, ओवरड्रॉ, और एएनआर की पहचान करके उन्हें ठीक किया जा सकता है.”

– विहान वर्मा, इंजीनियरिंग मैनेजर, ShareChat की Android टीम