কেস স্টাডিজ

নতুন R8 কনফিগারেশন অ্যানালাইজারের মাধ্যমে টিন্ডার অ্যাপে নতুন গ্রাহক আসার হার ৪৭% কমিয়েছে।

৪ মিনিটের পাঠ
৩ জন লেখক
Ajesh Pai, Ulises Uriel Verduzco Díaz , Tracy Agyemang

নতুন প্রজন্মের অবিবাহিতদের জন্য সাক্ষাৎকে সহজ ও মজাদার করে তোলার মাধ্যমে সত্যিকারের সংযোগ স্থাপন ও উৎসাহিত করাই টিন্ডারের লক্ষ্য। তবে, তাদের অ্যান্ড্রয়েড অ্যাপ্লিকেশনের কোডবেসের আকার বাড়ার সাথে সাথে এর জটিলতাও বৃদ্ধি পায়। তাদের সর্বশেষ অপটিমাইজেশন প্রচেষ্টার আগে, অ্যাপ্লিকেশনটির প্রায় ৭০% অপটিমাইজ করা ছিল না এবং এতে ১৭টি ডেক্স ফাইল ছিল, যার মধ্যে তিনটি শুধুমাত্র স্টার্টআপের জন্য নিবেদিত ছিল। যদিও তারা R8 সক্রিয় করেছিল, কিন্তু 'কিপ রুলস'-এর কারণে এর অপটিমাইজেশনের বেশিরভাগ সম্ভাবনাই আটকে গিয়েছিল এবং কোন নির্দিষ্ট নিয়মগুলো অপটিমাইজেশনে বাধা দিচ্ছিল, তা টিম শনাক্ত করতে পারছিল না। স্টার্টআপের সময় কমাতে এবং ব্যবহারকারীদের কাছে 'অ্যাপ্লিকেশন নট রেসপন্ডিং' (ANR) ত্রুটি হ্রাস করতে, টিন্ডার এই সমস্যাগুলো মোকাবেলার জন্য নতুন R8 কনফিগারেশন অ্যানালাইজারের সাহায্য নেয়।

R8 কনফিগারেশন অ্যানালাইজার ব্যবহার করে, টিন্ডার সফলভাবে অনিচ্ছাকৃত অপটিমাইজেশন ব্লকারগুলো শনাক্ত ও অপসারণ করেছে। এর ফলাফল ছিল তাৎক্ষণিক এবং প্রভাবশালী: টিন্ডারের অ্যাপ কোল্ড স্টার্ট ৪৭% কমেছে, অ্যাপ ডাউনলোডের আকার ২৮.৯৮% হ্রাস পেয়েছে (যা কমে ৬১.৫ মেগাবাইটে দাঁড়িয়েছে), এবং ব্যবহারকারীদের কাছে ANR-এর পরিমাণ ২৮% কমেছে।

কনফিগারেশন বিশ্লেষক

R8 কনফিগারেশন অ্যানালাইজারটি শ্রিংকিং, অপটিমাইজেশন এবং অবফাসকেশন স্কোর ট্র্যাক করার মাধ্যমে R8 অপটিমাইজেশন প্রদর্শন করে, যা উন্নতির জন্য উপলব্ধ ক্ষেত্রগুলো তুলে ধরে। এটি বাহ্যিক লাইব্রেরির নিয়মগুলো সহ বিস্তৃত, অপ্রয়োজনীয় বা অপ্রচলিত কিপ রুলগুলো দেখায়, যাতে আপনি কিপ রুলের প্রভাব বিশ্লেষণ করে সেগুলোকে পরিমার্জন করতে পারেন।

কনফিগারেশন অ্যানালাইজারে প্রদর্শিত প্রধান মেট্রিকগুলো হলো:

  • সঙ্কুচন স্কোর: R8 সঙ্কুচনের জন্য উপলব্ধ কোড শতাংশ।
  • অপ্টিমাইজেশন স্কোর: অপ্টিমাইজেশনের জন্য উন্মুক্ত কোডের শতাংশ (উদাহরণস্বরূপ, মেথড ইনলাইনিং, হরাইজন্টাল ক্লাস মার্জিং)।
  • অবফাসকেশন স্কোর: ক্লাস, মেথড এবং ফিল্ডের শতাংশ, যেগুলোকে আকার কমানোর জন্য R8 দ্বারা নতুন নাম দেওয়া যায়।

নিয়মকানুন ও সেগুলোর প্রভাব নিরীক্ষা করতে অ্যানালাইজারটি ব্যবহার করুন:

  • ব্যাপক নিয়মাবলী খুঁজুন: R8 অপটিমাইজেশনকে সীমাবদ্ধ করে এমন প্যাকেজ-ব্যাপী নিয়মাবলীর পরিধি সংকুচিত করুন, এবং শ্রিংকিং, অপটিমাইজেশন ও অবফাসকেশন থেকে বাদ দেওয়া নির্দিষ্ট ক্লাস, মেথড এবং ফিল্ড শনাক্ত করুন।
  • নিয়মাবলী পরিমার্জন করুন: অপটিমাইজেশন আনলক করতে শুধুমাত্র রিফ্লেকশন প্রয়োজন এমন নির্দিষ্ট ক্লাস/মেথডগুলোকে টার্গেট করুন।
  • অপ্রয়োজনীয় নিয়মগুলো অপসারণ করুন : আপনার বর্তমান বিল্ডে কোনো ক্লাস, মেথড বা ফিল্ডের সাথে মেলে না এমন নিয়মগুলো সরিয়ে ফেলুন।
  • অভিন্ন নিয়ম : অভিন্ন কিপ রুল বলতে এমন নিয়মকে বোঝায় যা একই ক্লাস, ফিল্ড এবং মেথডকে লক্ষ্য করে অথবা একই বা একাধিক কিপ রুল ফাইলে কিপ রুলের সদৃশ ঘোষণা থাকে।
  • অন্তর্ভুক্ত নিয়মাবলী খুঁজুন: বৃহত্তর কনফিগারেশনের আওতায় থাকা নির্দিষ্ট নিয়মাবলী পরিমার্জন করুন।
  • সমস্যাযুক্ত লাইব্রেরিগুলো শনাক্ত করুন: সমস্ত লাইব্রেরি থেকে একত্রিত কনজিউমার কিপ রুলগুলোর সম্মিলিত অপ্টিমাইজেশন প্রভাব পরীক্ষা করুন।
R8-কনফিগারেশন-অ্যানালাইজার-স্ক্রিনশট.png
একটি নমুনা অ্যাপ্লিকেশনের R8 কনফিগারেশন অ্যানালাইজার রিপোর্ট

এজেন্টিক টুলসের সাথে R8 কনফিগারেশন অ্যানালাইজার ব্যবহারে আপনাকে সহায়তা করার জন্য, আমরা একটি R8 অ্যানালাইজার স্কিল প্রকাশ করেছি। এই স্কিলটি R8 কনফিগারেশন অ্যানালাইজার রিপোর্টকে সারসংক্ষেপ করে অপটিমাইজেশন, অবফাসকেশন এবং শ্রিঙ্কিং স্কোরের মতো মূল মেট্রিকগুলো প্রদর্শন করার মাধ্যমে স্বয়ংক্রিয় ডেভেলপমেন্ট ওয়ার্কফ্লোকে অপটিমাইজ করে। এটি সবচেয়ে প্রভাবশালী পাঁচটি কিপ রুলও হাইলাইট করে, যা কোড অপটিমাইজেশনে কী বাধা দিচ্ছে সে সম্পর্কে আপনাকে স্পষ্ট ধারণা দেয়।

লুকানো অপ্টিমাইজেশন বাধাগুলি চিহ্নিত করা

ছবি.png

R8 কনফিগারেশন অ্যানালাইজার যুক্ত করার আগে, টিন্ডারের অ্যান্ড্রয়েড অ্যাপটি ব্যাপকভাবে অপটিমাইজ না করা কোডবেসের কারণে উল্লেখযোগ্য প্রযুক্তিগত ত্রুটিতে ভুগছিল। এই অপটিমাইজেশনের অভাব সরাসরি ব্যবহারকারীর অভিজ্ঞতাকে খারাপ করে দিত, যার ফলে ব্যবহারকারীরা অ্যাপটি ঠান্ডা অবস্থায় চালু হতে ধীরগতির সমস্যার সম্মুখীন হতেন।

এই সমস্যাগুলো সমাধান করার জন্য, টিন্ডার টিম তাদের R8 কনফিগারেশন পুঙ্খানুপুঙ্খভাবে নিরীক্ষা করতে R8 কনফিগারেশন অ্যানালাইজার ব্যবহার করেছিল। অ্যানালাইজারটি দেখায় যে, R8 ফুল মোড চালু থাকা সত্ত্বেও কোডবেসটির R8 অপটিমাইজেশন ছিল প্রায় ২৮%। R8 কনফিগারেশন অ্যানালাইজারের মাধ্যমে টিন্ডার শনাক্ত করে যে, তাদের নিজস্ব একটি লাইব্রেরি একটি ব্যাপক ও অনির্দিষ্ট 'কিপ' রুল চালু করছিল।

# Prevents optimization in all public classes along with all of their public and protected members

-keep public class * {
    public protected *;
}

এই "বিস্তৃত" নিয়মটি অনিচ্ছাকৃতভাবে পুরো অ্যাপ জুড়ে বিভিন্ন ডিপেন্ডেন্সিকে অন্তর্ভুক্ত করে ফেলেছিল, যার ফলে বহু সংখ্যক ক্লাসে অপটিমাইজেশন বাধাগ্রস্ত হয়। যেহেতু এই অতি-অন্তর্ভুক্তিমূলক নিয়মটি রানটাইম ক্র্যাশ প্রতিরোধ করত, তাই ডেভেলপাররা প্রায়শই রিফ্লেকশন ব্যবহার করা নতুন ফিচারগুলোর জন্য নতুন নিয়ম যোগ করতে ভুলে যেতেন, যার ফলে সময়ের সাথে সাথে লুকানো সমস্যাগুলো আরও জটিল হতে থাকে।

R8 কনফিগারেশন অ্যানালাইজার থেকে প্রাপ্ত তথ্যের সাহায্যে, দলটি সফলভাবে লাইব্রেরির বিস্তৃত 'কিপ রুল' দ্বারা প্রভাবিত নির্দিষ্ট ক্লাসগুলোকে শনাক্ত ও বিশ্লেষণ করেছে। দলটি অবিলম্বে আবিষ্কার করে যে, বড় এবং নন-ডাইনামিক্যালি কল করা ক্লাসগুলোতে অপটিমাইজেশন বাধাগ্রস্ত হচ্ছিল, যেখানে R8 অপটিমাইজেশন করতে পারত। এই নির্দিষ্ট 'কিপ রুল'টিকে পরিমার্জন করার ফলে টিন্ডার উল্লেখযোগ্য অপটিমাইজেশন ক্ষমতা উন্মোচন করতে, তাদের পুরোনো কনফিগারেশনগুলোর জট খুলতে এবং তাদের সামগ্রিক অপটিমাইজেশনের সংখ্যায় ব্যাপক উন্নতি করতে সক্ষম হয়। এর ফলে R8 স্কোর ২৮% থেকে বেড়ে ৫০% হয়, যা অ্যাপ্লিকেশন জুড়ে তাৎক্ষণিক পারফরম্যান্সের উন্নতি ঘটায় এবং টিন্ডার টিম এই সংখ্যাটিকে আরও উন্নত করার জন্য সক্রিয়ভাবে কাজ করছে।

  • দ্রুত লোডিং: দলটি অ্যাপের ধীরগতির কোল্ড স্টার্টের সম্মুখীন হওয়া ব্যবহারকারীর সংখ্যা ৪৭% কমাতে সক্ষম হয়েছে।
  • কম জায়গা নেয়: অ্যাপটির ডাউনলোড সাইজ ৮৬.৬ মেগাবাইট থেকে কমে ৬১.৫ মেগাবাইট হয়েছে (২৮.৯৮% হ্রাস)।
  • উন্নত স্থিতিশীলতা: ব্যবহারকারীর অনুভূত অ্যাপ্লিকেশন সাড়া না দেওয়ার (ANR) ত্রুটি ০.৩৫% থেকে কমে ০.২৮% হয়েছে, যা এটিকে সমতুল্য গড় সংখ্যার উল্লেখযোগ্যভাবে কাছাকাছি নিয়ে এসেছে।
  • জটিলতা হ্রাস: মোট DEX ফাইলের সংখ্যা ১৭ থেকে কমিয়ে ১১ করা হয়েছে, যার মধ্যে মাত্র দুটি স্টার্টআপ ফাইল অন্তর্ভুক্ত।

এই প্রযুক্তিগত কর্মক্ষমতা বৃদ্ধির পাশাপাশি, অ্যাপ্লিকেশন অপ্টিমাইজেশনের এই বর্ধিতকরণ সরাসরিভাবে বাস্তব ব্যবসায়িক প্রবৃদ্ধি এবং ব্যবহারকারীর সম্পৃক্ততা বৃদ্ধিতে ভূমিকা রেখেছে, বিশেষ করে সীমিত সম্পদের বাজারগুলোতে।

  • আঞ্চলিক সম্পৃক্ততা: যেসব দেশে কম র‍্যামের ডিভাইস বাজারের একটি বিশাল অংশ দখল করে আছে, সেখানে সম্পৃক্ততা সবচেয়ে বেশি বৃদ্ধি পেয়েছে এবং এই বিশাল বাজারে সম্পৃক্ততা বাড়ানোর মূল চাবিকাঠি ছিল ANR হার কমানো।
  • এনগেজমেন্ট বৃদ্ধি: অ্যাপ অপটিমাইজেশন বাড়ানোর পর থেকে এনগেজমেন্ট ৩% বৃদ্ধি পেয়েছে।
ছবি.png

নিরবচ্ছিন্ন একীকরণের মাধ্যমে ভবিষ্যৎ কর্মক্ষমতা সুরক্ষিত করা

কোড মিনিফিকেশনের বিষয়টি শুধু একবারের সমাধান নয়; এর জন্য নিরন্তর সতর্কতা প্রয়োজন। R8 কনফিগারেশন অ্যানালাইজারের মাধ্যমে অর্জিত ব্যাপক সাফল্যে অনুপ্রাণিত হয়ে, টিন্ডারের অ্যান্ড্রয়েড টিম রিগ্রেশন প্রতিরোধ করার জন্য সক্রিয়ভাবে তাদের দৈনন্দিন কার্যপ্রবাহে অপটিমাইজেশন মনিটরিং অন্তর্ভুক্ত করেছে।

টিন্ডারের টিম তাদের CI/CD পাইপলাইনে একটি নতুন জব যুক্ত করেছে, যা অপটিমাইজেশন স্ট্যাটসের পরিবর্তনগুলো রিপোর্ট করে, যাতে প্রত্যেকে দেখতে পারে যে তাদের অবদান অপটিমাইজেশনকে কীভাবে প্রভাবিত করছে। R8 কনফিগারেশন ইন্টিগ্রেশন নিয়ে ভাবছেন এমন অন্যান্য ডেভেলপারদের পরামর্শ দেওয়ার সময়, টিমটি অভ্যন্তরীণ ডিপেন্ডেন্সিগুলো অডিট করার গুরুত্বের ওপর জোর দেয়। যদিও বেশিরভাগ জনপ্রিয় থার্ড-পার্টি লাইব্রেরিগুলো সুনির্দিষ্ট নিয়মকানুন নিয়ে আসে, কোম্পানির অভ্যন্তরীণ প্রজেক্টগুলো, যেগুলোকে "স্থিতিশীল" বলে মনে করা হয়, সেগুলো আসলে এমন ব্যাপক নিয়মকানুন চালু করতে পারে যা সামগ্রিক অপটিমাইজেশনকে নেতিবাচকভাবে প্রভাবিত করে।

মূল বিষয়বস্তু

ব্যাপকভাবে অপটিমাইজ না করা কোডবেস এবং বিপুল সংখ্যক DEX ফাইলের সম্মুখীন হয়ে, টিন্ডারের তাদের অ্যাপের মিনিফিকেশন নিয়মগুলো স্বচ্ছভাবে নিরীক্ষা করার একটি উপায় প্রয়োজন ছিল। R8 কনফিগারেশন অ্যানালাইজারটি অতিরিক্ত বিস্তৃত অভ্যন্তরীণ লাইব্রেরি নিয়মগুলো এবং 'কিপ' নিয়ম দ্বারা প্রভাবিত ক্লাসগুলো শনাক্ত করার জন্য প্রয়োজনীয় আদর্শ টুলিং সরবরাহ করেছিল, যা টিমকে আত্মবিশ্বাসের সাথে তাদের কোডবেস অপটিমাইজ করার সুযোগ করে দেয়। ফলস্বরূপ, টিন্ডার সফলভাবে কোল্ড স্টার্ট প্রায় অর্ধেকে নামিয়ে আনে, তাদের APK ফাইলের আকার ২৮%-এর বেশি হ্রাস করে এবং ব্যবহারকারীদের জন্য একটি স্বাস্থ্যকর ও অধিক পারফরম্যান্সসম্পন্ন ভিত্তি স্থাপন করে। টিমটি এই সংখ্যাগুলোকে আরও উন্নত করার জন্য সক্রিয়ভাবে কাজ করে চলেছে।

R8 কনফিগারেশন অ্যানালাইজার কীভাবে ব্যবহার করবেন

আপনার বর্তমান অ্যান্ড্রয়েড গ্রেডল প্লাগইন (AGP) সংস্করণের উপর ভিত্তি করে R8 কনফিগারেশন অ্যানালাইজার এবং এর স্বতন্ত্র বৈশিষ্ট্যগুলি ব্যবহার করা যেতে পারে:

১. এজিপি ৯.৩ রিলিজ: আর৮ কনফিগারেশন অ্যানালাইজারটি এজিপি ৯.৩-এর সাথে সম্পূর্ণরূপে সমন্বিত ও প্রকাশিত হয়েছে। আর৮ রিলিজ বিল্ড চালানোর সময়, রিপোর্টটি `build/outputs/mapping/release/configanalyzer.html` ফোল্ডারে তৈরি হবে।

২. স্বতন্ত্র গ্রেডল টাস্ক: AGP 9.3 একটি স্বতন্ত্র গ্রেডল টাস্ক চালু করেছে যা আপনাকে সম্পূর্ণ রিলিজ বিল্ড না চালিয়েই অ্যানালাইজার রিপোর্ট তৈরি করার সুযোগ দেয়, এবং স্থানীয়ভাবে কিপ রুলগুলো পরিমার্জন করার সময় অনেক দ্রুত ফিডব্যাক লুপ প্রদান করে।

./gradlew :app:analyzeReleaseR8Config

রিপোর্টটি build/reports/r8/r8-config-analyzer-release.html.

৩. পুরোনো AGP ভার্সনে ব্যবহার: আপনি যদি AGP 9.3-এর নিচের কোনো ভার্সন ব্যবহার করেন, তাহলে আপনার কনফিগারেশন বিশ্লেষণ করার জন্য সম্পূর্ণ AGP ভার্সন মাইগ্রেট করার প্রয়োজন নেই। আপনি “Replacing R8 in AGP” নির্দেশাবলী অনুসরণ করে R8 ভার্সনটিকে স্বাধীনভাবে 9.3.7-dev বা তার উচ্চতর ভার্সনে আপডেট করতে পারেন। স্থানীয়ভাবে রিপোর্টটি তৈরি করতে, নির্দিষ্ট প্রপার্টি সহ আপনার বিল্ডটি রান করুন:

./gradlew assembleRelease  -Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=<output_directory>

আরও জানতে, R8 কনফিগারেশন অ্যানালাইজার ডকুমেন্টেশন দেখুন।

লিখেছেন:
পড়তে থাকুন