কেস স্টাডিজ

উচ্চ-প্রভাবশালী পারফরম্যান্স উন্নতির জন্য রেডিট কীভাবে R8 অপ্টিমাইজার ব্যবহার করেছে

৪ মিনিটের পাঠ
Ben Weiss
ডেভেলপার সম্পর্ক প্রকৌশলী

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

R8 অপ্টিমাইজার কীভাবে রেডিটকে সাহায্য করেছিল

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

  • একটি অ্যাপের আকার কমানোর জন্য ট্রি শেকিং সবচেয়ে গুরুত্বপূর্ণ ধাপ। এখানে, অ্যাপের ডিপেন্ডেন্সি এবং মূল অ্যাপ থেকে অব্যবহৃত কোড মুছে ফেলা হয়।
  • মেথড ইনলাইনিং মেথড কলগুলোকে প্রকৃত কোড দিয়ে প্রতিস্থাপন করে, ফলে অ্যাপটির পারফরম্যান্স উন্নত হয়।
  • কোডকে আরও সংক্ষিপ্ত করার জন্য ক্লাস মার্জিং এবং অন্যান্য কৌশল প্রয়োগ করা হয়। এই পর্যায়ে মূল উদ্দেশ্য আর সোর্স কোডের পাঠযোগ্যতা নয়, বরং কম্পাইল করা কোডকে দ্রুত কাজ করানো। তাই ইন্টারফেস বা ক্লাস হায়ারার্কির মতো অ্যাবস্ট্রাকশনগুলো এখানে অপ্রাসঙ্গিক এবং এগুলো সরিয়ে ফেলা হবে।
  • আইডেন্টিফায়ার মিনিফিকেশন ক্লাস, ফিল্ড এবং মেথডের নাম পরিবর্তন করে ছোট ও অর্থহীন নাম দেয়। তাই MyDataModel এর পরিবর্তে আপনার কাছে ‘a’ নামের একটি ক্লাস থাকতে পারে।
  • অ্যাপের আকার আরও কমাতে রিসোর্স শ্রিংকিং এক্সএমএল ফাইল এবং ড্রয়েবলের মতো অব্যবহৃত রিসোর্সগুলো সরিয়ে দেয়।
ছবি.png

R8 অপ্টিমাইজেশনের প্রধান পর্যায়গুলি

সুনির্দিষ্ট তথ্য থেকে ব্যবহারকারীর সন্তুষ্টি: উৎপাদনে সাফল্য চিহ্নিতকরণ

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

ছবি.png

কীভাবে R8 রেডিটের অ্যাপের পারফরম্যান্স উন্নত করেছে

দলটি ৪০% দ্রুততর কোল্ড স্টার্টআপ , "অ্যাপ্লিকেশন নট রেসপন্ডিং" (ANR) ত্রুটি ৩০% হ্রাস , ফ্রেম রেন্ডারিং-এ ২৫% উন্নতি এবং অ্যাপের আকারে ১৪% হ্রাস লক্ষ্য করেছে।

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

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

ছবি.png

ড্রিউ হেভনার: "২ সপ্তাহেরও কম সময়ে R8-এর পূর্ণ সম্ভাবনাকে কাজে লাগানোর টুল"

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

প্রাপ্তি নিশ্চিতকরণ: ম্যাক্রোবেঞ্চমার্কের মাধ্যমে গভীর বিশ্লেষণ

বাস্তব ক্ষেত্রে উল্লেখযোগ্য উন্নতি পর্যবেক্ষণ করার পর, রেডিটের ইঞ্জিনিয়ারিং টিম এবং গুগলের অ্যান্ড্রয়েড ডেভেলপার রিলেশনস টিম এই প্রাপ্তিগুলোকে বৈজ্ঞানিকভাবে নিশ্চিত করতে এবং আরও অপ্টিমাইজেশন নিয়ে পরীক্ষা-নিরীক্ষা করার জন্য বিস্তারিত বেঞ্চমার্ক পরিচালনা করে। এই বিশ্লেষণের জন্য, রেডিট ইঞ্জিনিয়ারিং তাদের অ্যাপের দুটি সংস্করণ সরবরাহ করে: একটি অপ্টিমাইজেশন ছাড়া এবং অন্যটি R8 ও আরও দুটি মৌলিক পারফরম্যান্স অপ্টিমাইজেশন টুল— বেসলাইন প্রোফাইল এবং স্টার্টআপ প্রোফাইল— প্রয়োগ করে তৈরি।

বেসলাইন প্রোফাইল কার্যকরভাবে জাস্ট ইন টাইম (JIT) কম্পাইলেশন ধাপগুলোকে ব্যবহারকারীর ডিভাইস থেকে সরিয়ে ডেভেলপারদের মেশিনে নিয়ে আসে। এর ফলে তৈরি হওয়া অ্যাহেড অফ টাইম (AOT) কম্পাইল করা কোড স্টার্টআপ টাইম এবং রেন্ডারিং সমস্যা উভয়ই কমাতে পারে বলে প্রমাণিত হয়েছে।

যখন কোনো অ্যাপ প্যাকেজ করা হয়, তখন d8 ডেক্সার ক্লাস ও মেথডগুলো নিয়ে আপনার অ্যাপের ` classes.dex ফাইলগুলো তৈরি করে। যখন কোনো ব্যবহারকারী অ্যাপটি খোলেন, তখন এই ডেক্স ফাইলগুলো একের পর এক লোড হতে থাকে, যতক্ষণ না অ্যাপটি চালু হয়। একটি স্টার্টআপ প্রোফাইল প্রদান করার মাধ্যমে আপনি d8-কে জানিয়ে দেন যে কোন ক্লাস ও মেথডগুলো প্রথম classes.dex ফাইলগুলোতে প্যাক করতে হবে। এই কাঠামোটি অ্যাপটিকে কম ফাইল লোড করতে সাহায্য করে, যা ফলস্বরূপ স্টার্টআপের গতি বাড়ায়।

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

অবশেষে বেঞ্চমার্কটি লেখার জন্য শুধু এইটুকুই প্রয়োজন ছিল:

uiAutomator {

  startApp(REDDIT)

  repeat(3) {

    onView { isScrollable }.fling(Direction.DOWN) }

  repeat(3) {

    onView {isScrollable }.fling(Direction.UP)

  }

}

বেঞ্চমার্ক ডেটা মাঠ পর্যায়ের পর্যবেক্ষণকে নিশ্চিত করেছে এবং আরও গভীর অন্তর্দৃষ্টি প্রদান করেছে। সম্পূর্ণরূপে অপ্টিমাইজ করা অ্যাপটি ৫৫% দ্রুত চালু হয়েছে এবং ব্যবহারকারীরা ১৮% আগে ব্রাউজ করা শুরু করতে পেরেছেন। অপ্টিমাইজ করা অ্যাপটিতে জাস্ট ইন টাইম (JIT) কম্পাইলেশনের ঘটনা দুই-তৃতীয়াংশ এবং JIT কম্পাইলেশনের সময় এক-তৃতীয়াংশ হ্রাস পেয়েছে। ফ্রেম রেন্ডারিং উন্নত হয়েছে, যার ফলে বেঞ্চমার্ক করা ইউজার জার্নি জুড়ে ১৯% বেশি ফ্রেম রেন্ডার করা হয়েছে। পরিশেষে, অ্যাপটির আকার এক-তৃতীয়াংশের বেশি কমে গেছে।

ছবি.png

রেডিটের সামগ্রিক কর্মক্ষমতার উন্নতি

আপনি এইভাবে একটি কাস্টম ম্যাক্রোবেঞ্চমার্ক ট্রেস সেকশন মেট্রিক ব্যবহার করে JIT কম্পাইলেশন টাইম পরিমাপ করতে পারেন:

val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")

রূপান্তরের পেছনের প্রযুক্তিকে সক্ষম করা: R8

R8 সম্পূর্ণ মোডে সক্রিয় করতে, আপনাকে আপনার app/build.gradle.kts ফাইলে রিলিজ বিল্ড টাইপে minifyEnabled এবং shrinkResources true সেট করে কনফিগার করতে হবে।

android {

    ...

    buildTypes {

        release {

            isMinifyEnabled = true

            isShrinkResources = true

            proguardFiles(

                getDefaultProguardFile("proguard-android-optimize.txt"),

                "keep-rules.pro",

            )

        }

    }

}

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

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

আপনার অ্যাপে রেডিটের উদাহরণ অনুসরণ করুন

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

এই কেস স্টাডিতে বর্ণিত রূপরেখা অনুসরণ করে—যেমন সুযোগ শনাক্ত করতে অ্যাপ পারফরম্যান্স স্কোরের মতো টুল ব্যবহার করা, R8-এর সম্পূর্ণ অপটিমাইজেশন সম্ভাবনাকে কাজে লাগানো, বাস্তব ডেটা পর্যবেক্ষণ করা এবং বোঝাপড়া নিশ্চিত ও গভীর করতে বেঞ্চমার্ক ব্যবহার করা—অন্যান্য ডেভেলপাররাও অনুরূপ সাফল্য অর্জন করতে পারেন।

আপনার নিজের অ্যাপে R8 ব্যবহার শুরু করতে, R8 অপটিমাইজার সক্রিয় করা, কনফিগার করা এবং এর সমস্যা সমাধানের বিষয়ে সদ্য হালনাগাদ করা অফিসিয়াল ডকুমেন্টেশন ও নির্দেশিকা দেখুন।

    লিখেছেন:

    পড়তে থাকুন