আজকাল, কোনো অ্যাপ লোড হওয়ার জন্য অপেক্ষা করার মতো ধৈর্য কারো নেই। মোবাইল ইকোসিস্টেমে, রেসপন্সিভনেসই (দ্রুত সাড়া দেওয়ার ক্ষমতা) নির্ধারণ করে দেয় যে একজন ব্যবহারকারী অ্যাপটি ব্যবহার করতে থাকবেন, নাকি কয়েক সেকেন্ডের মধ্যেই তা ডিলিট করে দেবেন। একটি জটিল ইন্টারফেসকে তাৎক্ষণিকভাবে লোড করার জন্য প্রচলিত কোড অপটিমাইজেশনের বাইরে গিয়ে, স্ক্রিনে পৌঁছানোর আগে ডিভাইসটি কীভাবে নির্দেশনাগুলো প্রসেস করে, তার ওপর মনোযোগ দিতে হয়।
স্টার্টআপের বিলম্বের সমস্যা সমাধানের জন্য, গুগল ‘বেসলাইন প্রোফাইল’ নামে একটি যুগান্তকারী টুল চালু করেছে , যা ডেভেলপারদের গুরুত্বপূর্ণ কোড পাথগুলো চিহ্নিত করার সুযোগ দেয়। এর মাধ্যমে, ডিভাইসটিকে প্রথমবার অ্যাপটি কীভাবে চালাতে হবে তা ‘খুঁজে বের’ করতে হয় না, ফলে একেবারে প্রথমবার চালু করা থেকেই অ্যাপটি সাবলীলভাবে চলে , তা ক্লিন ইনস্টল হোক বা কোনো আপডেট।
বেসলাইন প্রোফাইল বলতে ঠিক কী বোঝায় এবং এগুলো কীভাবে কাজ করে?
এগুলো বোঝার জন্য, আপনাকে প্রথমে জানতে হবে যে অ্যান্ড্রয়েড, অ্যান্ড্রয়েড রানটাইম (ART) ব্যবহার করে। ঐতিহ্যগতভাবে, কোড জাস্ট-ইন-টাইম (JIT) কম্পাইলেশন ব্যবহার করে এক্সিকিউট করা হয় , যা অ্যাপ চলার সময় কোডকে অনুবাদ করে, অথবা অ্যাহেড-অফ-টাইম (AOT) কম্পাইলেশন ব্যবহার করে , যা এই সমস্ত কাজ আগে থেকেই করে রাখে। JIT-এর সমস্যা হলো, এটি সামান্য স্টাটার বা প্রাথমিক ধীরগতির কারণ হতে পারে, কারণ কোডটি শুরু থেকেই অপ্টিমাইজ করা থাকে না।
বেসলাইন প্রোফাইল একটি প্রধান নির্দেশিকা হিসেবে কাজ করে। এগুলি মূলত ক্লাস এবং মেথডগুলির একটি তালিকা, যা ব্যবহারকারী অ্যাপটি খোলার আগে সিস্টেমকে অবশ্যই AOT ব্যবহার করে প্রি-কম্পাইল করতে হয় । এর ফলে, রানটাইমকে তাৎক্ষণিকভাবে কোড ইন্টারপ্রেট করতে হয় না, যার ফলস্বরূপ প্রাথমিক এক্সিকিউশনে গতি ৩০% পর্যন্ত বৃদ্ধি পেতে পারে।
ক্লাউড প্রোফাইলের বিপরীতে, যা হাজার হাজার ব্যবহারকারীর অ্যাপ ব্যবহার এবং গুগল প্লে দ্বারা সেই ডেটা যোগ করার উপর নির্ভর করে (একটি প্রক্রিয়া যা সম্পন্ন হতে কয়েক দিন সময় লাগে), বেসলাইন প্রোফাইল সরাসরি অ্যান্ড্রয়েড অ্যাপ বান্ডেল (AAB)-এর সাথে সরবরাহ করা হয় । এর মানে হলো, অপটিমাইজেশন তাৎক্ষণিকভাবে উপলব্ধ হয়, যা নতুন আপডেট হওয়া সংস্করণগুলোতে প্রায়শই দেখা যাওয়া "ধীরগতির" সময়কালকে দূর করে।
কখন এই কৌশলটি প্রয়োগ করা অপরিহার্য?
সব অ্যাপ্লিকেশনের জন্য একই স্তরের অপ্টিমাইজেশনের প্রয়োজন হয় না, তবে এমন কিছু পরিস্থিতি আছে যেখানে এগুলো জীবন রক্ষাকারী হিসেবে কাজ করে। কোল্ড স্টার্টআপ টাইম কমানোর জন্য প্রোফাইল ব্যবহার করা অপরিহার্য , বিশেষ করে যদি আপনার স্প্ল্যাশ স্ক্রিনে ভারী ডিপেন্ডেন্সি বা জটিল রেন্ডারিং থাকে। যদি আপনি লক্ষ্য করেন যে প্রথমবার চালু হতে দেরি হচ্ছে কিন্তু দ্বিতীয়বার অত্যন্ত দ্রুত, তাহলে আপনার একটি কম্পাইলেশন সমস্যা রয়েছে যা প্রোফাইলের মাধ্যমে সমাধান করা যেতে পারে।
তাছাড়া, এগুলো শুধু স্টার্টআপের জন্যই নয়। স্ক্রোলিংয়ের সাবলীলতা উন্নত করার জন্য এগুলো অত্যন্ত কার্যকর । লিস্ট লজিক এবং অ্যানিমেশন প্রি-কম্পাইল করার মাধ্যমে, আপনি ফ্রেম ড্রপ হওয়া প্রতিরোধ করতে পারেন, যা কন্টেন্ট নেভিগেশনকে অবিশ্বাস্যভাবে মসৃণ করে তোলে। চেকআউট বা রেজিস্ট্রেশন ফ্লো-এর মতো পুনরাবৃত্তিমূলক ফিচারগুলো অপ্টিমাইজ করার জন্যও এগুলো আদর্শ , যা নিশ্চিত করে যে সবচেয়ে বেশি ব্যবহৃত পথগুলোই যেন দ্রুততম হয়।
জেনারেশন মডিউলের ধাপে ধাপে কনফিগারেশন
এটি বাস্তবায়নের সবচেয়ে আধুনিক উপায় হলো অ্যান্ড্রয়েড স্টুডিও-তে একটি বিশেষ মডিউলের মাধ্যমে। শুরু করার জন্য, আপনাকে যেতে হবে... নতুন মডিউল এবং টেমপ্লেট নির্বাচন করুন বেসলাইন প্রোফাইল জেনারেটরএখানে আপনি লক্ষ্য অ্যাপ্লিকেশন, মডিউলের নাম নির্ধারণ করবেন (উদাহরণস্বরূপ, baselineprofileএবং পছন্দের ভাষা, হয় কোটলিন অথবা জাভা।
এই প্রক্রিয়াটি একটি পরীক্ষার পরিবেশ তৈরি করাকে স্বয়ংক্রিয় করে। উইজার্ডটি প্লাগইনটি কনফিগার করবে। androidx.baselineprofile এবং লাইব্রেরি যোগ করবে প্রোফাইলইনস্টলার অ্যাপ্লিকেশন মডিউলে। এটি ব্যবহারকারীদের ডিভাইসে প্রোফাইলটি সঠিকভাবে ইনস্টল করা নিশ্চিত করার জন্য দায়ী, এমনকি অ্যান্ড্রয়েডের পুরোনো সংস্করণগুলিতেও, যেগুলি ক্লাউড প্রোফাইল সমর্থন করে না।
একটি গুরুত্বপূর্ণ প্রযুক্তিগত বিষয় হলো অবফাসকেশন ম্যানেজমেন্ট। প্রোফাইলটি বৈধ হওয়ার জন্য, এটিকে এমন একটি ভ্যারিয়েন্টে জেনারেট করতে হবে যেখানে `isMinifyEnabled`-এর মান `false` সেট করা আছে । তবে, চূড়ান্ত সংস্করণ নিয়ে চিন্তার কোনো কারণ নেই: R8 প্রোডাকশন APK-এর অবফাসকেটেড কোডের সাথে মেলানোর জন্য প্রোফাইলের নিয়মগুলো নতুন করে লিখতে সক্ষম, যার ফলে সর্বোচ্চ নিরাপত্তা এবং সাইজ অপটিমাইজেশন বজায় থাকে।
গুরুত্বপূর্ণ ব্যবহারকারী যাত্রা (CUJ) তৈরি করা
একটি সাধারণ প্রোফাইল যা শুধু অ্যাপটি চালু করে, তা বেশ কাজের, কিন্তু এর পারফরম্যান্স থেকে সেরা ফল পেতে হলে আমাদের এর বৈশিষ্ট্যগুলো সংজ্ঞায়িত করতে হবে। গুরুত্বপূর্ণ ব্যবহারকারী যাত্রাএটি ক্লাসের মধ্যেই করা হয়। BaselineProfileGenerator utilizando la regla BaselineProfileRuleব্লকের ভেতরে collectএকজন ব্যবহারকারী বাস্তবে যে কাজগুলো করবে, আমাদের সেগুলোর অনুকরণ করতে হবে।
উদাহরণস্বরূপ, যদি আপনার অ্যাপে অ্যাসিঙ্ক্রোনাস লোড থাকে, তবে শুধু কল করাই যথেষ্ট নয়। startActivityAndWait()আপনাকে অবশ্যই স্মার্ট ওয়েট (smart waits) প্রয়োগ করতে হবে, যাতে কন্টেন্টটি অবশেষে প্রদর্শিত হলে সিস্টেম সেই কোডটি রেজিস্টার করে নেয় যা এক্সিকিউট হবে। এটি ইন্টারফেসের সাথে ইন্টারঅ্যাক্ট করার মাধ্যমে সম্পন্ন করা হয়। UiAutomatorপরীক্ষা শেষ হওয়ার আগে নির্দিষ্ট উপাদানগুলো খোঁজা এবং সেগুলোর দৃশ্যমান হওয়ার জন্য অপেক্ষা করা।
উন্নত কর্মপ্রবাহের জন্য আপনি জেনারেটরটি প্রোগ্রাম করতে পারেন। তালিকাগুলি উল্লম্বভাবে স্ক্রোল করুন পদ্ধতি ব্যবহার করে flingবিস্তারিত স্ক্রিনগুলিতে যান অথবা সিস্টেম পারমিশন ডায়ালগগুলি পরিচালনা করুন। সিমুলেটেড ওয়াকথ্রু যত নির্ভুল হবে, তৈরি হওয়া প্রোফাইলও তত নির্ভুল হবে, এবং ফলস্বরূপ, অভিজ্ঞতাটি আরও মসৃণ হবে প্রকৃত শেষ ব্যবহারকারী।
কর্মক্ষমতা তৈরি এবং যাচাইকরণ
জেনারেটরটি লেখা হয়ে গেলে, এবার এটি চালানোর পালা। আদর্শগতভাবে, আপনার একটি ব্যবহার করা উচিত গ্রেডল-পরিচালিত ডিভাইস (GMD) অথবা একটি ইমেজ সহ একটি এমুলেটর aosp রুট পারমিশন থাকা, যদিও লাইব্রেরির সাম্প্রতিক সংস্করণগুলি ইতিমধ্যেই ফিজিক্যাল ডিভাইসে প্রোফাইল তৈরি করার অনুমতি দেয় অ্যান্ড্রয়েড 13 বা তারও বেশি জটিলতা ছাড়াই
গ্রেডল টাস্ক চালানোর সময় :app:generateBaselineProfileসিস্টেমটি অ্যাপটি বেশ কয়েকবার চালু করে, কল করা ক্লাস ও মেথডগুলো সংগ্রহ করে এবং একটি ফাইল তৈরি করে। baseline-prof.txtএই ফাইলটি স্বয়ংক্রিয়ভাবে অ্যাপের অ্যাসেটস ফোল্ডারে রাখা হয়, যা AAB-তে প্যাকেজ করার জন্য প্রস্তুত থাকে।
এটা সত্যিই কাজ করেছিল কিনা তা জানতে, আমরা ব্যবহার করেছিলাম জেটপ্যাক ম্যাক্রোবেঞ্চমার্কআমরা এমন একটি পরীক্ষা তৈরি করেছি যা দুটি পরিস্থিতির তুলনা করে: একটি হলো CompilationMode.None() (অপ্টিমাইজেশন ছাড়া) এবং অন্যটি অপ্টিমাইজেশন সহ CompilationMode.Partial() (প্রোফাইলটি ব্যবহার করে)। মেট্রিকটি বিশ্লেষণ করার সময় সম্পূর্ণ প্রদর্শনের জন্য সময়মিলিসেকেন্ডে ব্যাপক হ্রাস লক্ষ্য করা একটি সাধারণ বিষয়, যা প্রমাণ করে যে গুরুত্বপূর্ণ কোড আর রিয়েল টাইমে কম্পাইল করার প্রয়োজন নেই।
বাস্তব ক্ষেত্রে, যেমন বড় আকারের অ্যাপের ক্ষেত্রে, দেখা গেছে যে জাস্ট-ইন-টাইম (JIT) থ্রেড ২৫% সময় ব্যস্ত থাকার পরিবর্তে মাত্র ৩%-এ নেমে আসে। এর ফলে সিপিইউ রিসোর্স মুক্ত হয় এবং ডিভাইসের তাপীয় চাপ কমে, যা অ্যাপটিকে আরও স্থিতিশীল ও কার্যকর করে তোলে , বিশেষ করে কম দামের ডিভাইসগুলোতে।
বেসলাইন প্রোফাইল প্রয়োগ করা ইউজার এক্সপেরিয়েন্সের জন্য অন্যতম সাশ্রয়ী বিনিয়োগ, কারণ এটি সফটওয়্যারকে একেবারে প্রথম সেকেন্ড থেকেই হালকা ও রেসপন্সিভ করে তোলে। বুট টাইম তৈরি ও ক্রমাগত যাচাই করার জন্য বেঞ্চমার্ক মডিউলের ব্যবহার একত্রিত করে, যেকোনো ডেভেলপার একটি ধীরগতির অ্যাপ্লিকেশনকে তাৎক্ষণিকভাবে এমন একটি পেশাদার টুলে রূপান্তরিত করতে পারেন যা ব্যবহারকারীদের ধরে রাখে।