কীভাবে করবেন

গভীরতর কর্মক্ষমতা বিবেচনা

৮ মিনিটের পাঠ
৩ জন লেখক
Ben Weiss, Breana Tate, Jossi Wolf

আপনারা শান্ত হোন এবং পারফরম্যান্সের পটভূমি সম্পর্কে আরও বিস্তারিত জানতে আমাদের সাহায্য নিন।

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

প্রোফাইল নির্দেশিত অপ্টিমাইজেশন

একটি অ্যান্ড্রয়েড অ্যাপের স্টার্টআপ এবং রানটাইম পারফরম্যান্স উন্নত করার জন্য বেসলাইন প্রোফাইল এবং স্টার্টআপ প্রোফাইল হলো ভিত্তি। এগুলো প্রোফাইল গাইডেড অপটিমাইজেশন নামক একদল পারফরম্যান্স অপটিমাইজেশনের অংশ।

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

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

ট্রেলো এবং বেসলাইন প্রোফাইল

আমরা ট্রেলো অ্যাপের ইঞ্জিনিয়ারদের কাছে জানতে চেয়েছিলাম যে বেসলাইন প্রোফাইলগুলো তাদের অ্যাপের পারফরম্যান্সকে কীভাবে প্রভাবিত করেছে। তাদের প্রধান ইউজার জার্নিতে বেসলাইন প্রোফাইল প্রয়োগ করার পর, ট্রেলো অ্যাপ চালু হওয়ার সময়ে উল্লেখযোগ্য ২৫% হ্রাস লক্ষ্য করেছে।

ছবি.png

ট্রেলো বেসলাইন প্রোফাইল ব্যবহার করে তাদের অ্যাপের স্টার্টআপ টাইম ২৫% উন্নত করতে সক্ষম হয়েছে।

মেটা-তে বেসলাইন প্রোফাইল

এছাড়াও, মেটার প্রকৌশলীরা সম্প্রতি একটি নিবন্ধ প্রকাশ করেছেন যেখানে তারা বেসলাইন প্রোফাইলের সাহায্যে কীভাবে তাদের অ্যান্ড্রয়েড অ্যাপগুলোর গতি বাড়াচ্ছেন তা তুলে ধরেছেন।

ছবি.png

বেসলাইন প্রোফাইল প্রয়োগ করার পর মেটার অ্যাপগুলো জুড়ে টিমগুলো বিভিন্ন গুরুত্বপূর্ণ মেট্রিক্সে ৪০% পর্যন্ত উন্নতি দেখেছে।

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

বেসলাইন প্রোফাইল দিয়ে শুরু করুন

বেসলাইন বা স্টার্টআপ প্রোফাইল তৈরি করতে, আপনাকে একটি ম্যাক্রোবেঞ্চমার্ক টেস্ট লিখতে হয় যা অ্যাপটিকে পরীক্ষা করে। টেস্ট চলাকালীন প্রোফাইল ডেটা সংগ্রহ করা হয়, যা অ্যাপ কম্পাইলেশনের সময় ব্যবহার করা হবে। এই টেস্টগুলো নতুন UiAutomator API ব্যবহার করে লেখা হয়, যা নিয়ে আমরা আগামীকাল আলোচনা করব।

এই ধরনের একটি বেঞ্চমার্ক লেখা খুবই সহজ এবং আপনি গিটহাবে সম্পূর্ণ নমুনাটি দেখতে পারেন।

  @Test

fun profileGenerator() {

    rule.collect(

        packageName = TARGET_PACKAGE,

        maxIterations = 15,

        stableIterations = 3,

        includeInStartupProfile = true

    ) {

        uiAutomator {

            startApp(TARGET_PACKAGE)

        }

    }


}

বিবেচ্য বিষয়সমূহ

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

প্রোফাইল গাইডেড অপটিমাইজেশন দিয়ে শুরু করুন

বেসলাইন প্রোফাইলগুলো অভ্যন্তরীণভাবে কীভাবে কাজ করে তা জানতে, অ্যান্ড্রয়েড ডেভেলপারস সামিটের এই ভিডিওটি দেখুন:

এবং আরও বিশদ আলোচনার জন্য প্রোফাইল গাইডেড অপটিমাইজেশন বিষয়ে অ্যান্ড্রয়েড বিল্ড টাইম এপিসোডটি দেখুন:

আরও পড়ার জন্য আমাদের কাছে বেসলাইন প্রোফাইল এবং স্টার্টআপ প্রোফাইলের উপর বিস্তারিত নির্দেশিকাও রয়েছে।

জেটপ্যাক কম্পোজের কর্মক্ষমতা উন্নতি

অ্যান্ড্রয়েডের UI ফ্রেমওয়ার্কের ক্ষেত্রে ইঞ্জিনিয়ারিং টিমের পারফরম্যান্স বিনিয়োগ ফলপ্রসূ হয়েছে। Jetpack Compose-এর ১.৯ সংস্করণ থেকে, একটি অভ্যন্তরীণ দীর্ঘ স্ক্রলিং বেঞ্চমার্ক পরীক্ষার সময় স্ক্রল জ্যাঙ্ক কমে ০.২%-এ নেমে এসেছে।

jankyFrames.png

সর্বশেষ সংস্করণগুলোতে অন্তর্ভুক্ত বিভিন্ন বৈশিষ্ট্যের কারণেই এই উন্নতিগুলো সম্ভব হয়েছে।

কাস্টমাইজযোগ্য ক্যাশে উইন্ডো

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

কাস্টমাইজযোগ্য ক্যাশ উইন্ডো ব্যবহার শুরু করতে, একটি LazyLayoutCacheWindow ইনস্ট্যানশিয়েট করুন এবং এটিকে আপনার লেজি লিস্ট বা লেজি গ্রিডে পাস করুন। বিভিন্ন ক্যাশ উইন্ডো সাইজ ব্যবহার করে আপনার অ্যাপের পারফরম্যান্স পরিমাপ করুন, যেমন ভিউপোর্টের ৫০%। সর্বোত্তম মানটি আপনার কন্টেন্টের গঠন এবং আইটেমের আকারের উপর নির্ভর করবে।

  val dpCacheWindow = LazyLayoutCacheWindow(ahead = 150.dp, behind = 100.dp)

val state = rememberLazyListState(cacheWindow = dpCacheWindow)

LazyColumn(state = state) {

    // column contents

}

বিরতিযোগ্য রচনা

এই ফিচারটি কম্পোজিশন পজ করার এবং এর কাজকে কয়েকটি ফ্রেমে ভাগ করে নেওয়ার সুযোগ দেয়। এপিআইগুলো ১.৯ সংস্করণে যুক্ত করা হয়েছিল এবং এখন ১.১০ সংস্করণে লেজি লেআউট প্রিফেচ-এ এটি ডিফল্টভাবে ব্যবহৃত হয়। দীর্ঘ কম্পোজিশন সময় লাগে এমন জটিল আইটেমগুলোর ক্ষেত্রে আপনি এর সবচেয়ে বেশি সুবিধা পাবেন।

ছবি.png

কম্পোজের আরও পারফরম্যান্স অপ্টিমাইজেশন

Compose-এর 1.9 এবং 1.10 সংস্করণগুলিতে দলটি আরও বেশ কিছু অপ্টিমাইজেশন করেছে যা কিছুটা কম স্পষ্ট।

অভ্যন্তরীণভাবে কো-রুটিন ব্যবহারকারী বেশ কিছু এপিআই উন্নত করা হয়েছে। উদাহরণস্বরূপ, Draggable এবং Clickable ব্যবহার করার সময় ডেভেলপাররা দ্রুততর প্রতিক্রিয়া এবং উন্নত অ্যালোকেশন সংখ্যা দেখতে পাবেন।

লেআউট আয়তক্ষেত্র ট্র্যাকিং-এর অপ্টিমাইজেশন onVisibilityChanged() এবং onLayoutRectChanged() এর মতো মডিফায়ারগুলির পারফরম্যান্স উন্নত করেছে। এর ফলে, এই API-গুলি স্পষ্টভাবে ব্যবহার না করা হলেও লেআউট পর্বটি দ্রুততর হয়।

onPlaced() এর মাধ্যমে অবস্থান পর্যবেক্ষণ করার সময় ক্যাশ করা মান ব্যবহার করাও পারফরম্যান্সের আরেকটি উন্নতি।

পটভূমিতে টেক্সট প্রিফেচ করুন

সংস্করণ ১.৯ থেকে শুরু করে, Compose একটি ব্যাকগ্রাউন্ড থ্রেডে টেক্সট প্রিফেচ করার ক্ষমতা যোগ করেছে। এটি আপনাকে দ্রুততর টেক্সট লেআউটের জন্য ক্যাশে প্রি-ওয়ার্ম করতে সক্ষম করে এবং অ্যাপ রেন্ডারিং পারফরম্যান্সের জন্য প্রাসঙ্গিক। লেআউটের সময়, টেক্সটকে অ্যান্ড্রয়েড ফ্রেমওয়ার্কে পাঠাতে হয়, যেখানে একটি ওয়ার্ড ক্যাশে পপুলেট করা হয়। ডিফল্টরূপে এটি Ui থ্রেডে চলে। প্রিফেচিং এবং ওয়ার্ড ক্যাশে পপুলেট করার কাজটি একটি ব্যাকগ্রাউন্ড থ্রেডে অফলোড করলে লেআউটের গতি বাড়তে পারে, বিশেষ করে দীর্ঘ টেক্সটের ক্ষেত্রে। একটি ব্যাকগ্রাউন্ড থ্রেডে প্রিফেচ করার জন্য, আপনি যেকোনো কম্পোজেবলে একটি কাস্টম এক্সিকিউটর পাস করতে পারেন যা আন্ডার দ্য হুড BasicText ব্যবহার করছে, যেমন একটি CompositionLocalProviderLocalBackgroundTextMeasurementExecutor পাস করে।

  val defaultTextMeasurementExecutor = Executors.newSingleThreadExecutor()

CompositionLocalProvider(

    LocalBackgroundTextMeasurementExecutor provides DefaultTextMeasurementExecutor

) {

    BasicText("Some text that should be measured on a background thread!")


}

টেক্সটের ধরনের ওপর নির্ভর করে, এটি আপনার টেক্সট রেন্ডারিংয়ের পারফরম্যান্স উন্নত করতে পারে। এটি আপনার অ্যাপের রেন্ডারিং পারফরম্যান্স উন্নত করছে কিনা, তা নিশ্চিত করতে বেঞ্চমার্ক করুন এবং ফলাফলগুলো তুলনা করুন।

পটভূমি কাজের কর্মক্ষমতা বিবেচনা

অনেক অ্যাপের জন্য ব্যাকগ্রাউন্ড ওয়ার্ক একটি অপরিহার্য অংশ। আপনি হয়তো WorkManager বা JobScheduler-এর মতো লাইব্রেরি ব্যবহার করে নিম্নলিখিত কাজগুলো সম্পাদন করছেন:

  • পর্যায়ক্রমে বিশ্লেষণমূলক ঘটনা আপলোড করা
  • একটি ব্যাকএন্ড পরিষেবা এবং ডাটাবেসের মধ্যে ডেটা সিঙ্ক করা
  • প্রসেসিং মিডিয়া (অর্থাৎ ছবির আকার পরিবর্তন বা সংকুচিত করা)

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

তবে, WorkManager কোনো সর্বজনীন সমাধান নয়। অ্যান্ড্রয়েডেও বেশ কিছু পাওয়ার-অপ্টিমাইজড এপিআই রয়েছে, যেগুলো নির্দিষ্ট কিছু সাধারণ কোর ইউজার জার্নি (CUJ) মাথায় রেখে বিশেষভাবে ডিজাইন করা হয়েছে।

এগুলোর মধ্যে কয়েকটি তালিকার জন্য ব্যাকগ্রাউন্ড ওয়ার্ক ল্যান্ডিং পেজটি দেখুন, যার মধ্যে উইজেট আপডেট করা এবং ব্যাকগ্রাউন্ডে লোকেশন পাওয়া অন্তর্ভুক্ত রয়েছে।

পটভূমি কাজের জন্য স্থানীয় ডিবাগিং টুল: সাধারণ পরিস্থিতি

ব্যাকগ্রাউন্ড ওয়ার্ক ডিবাগ করতে এবং কোনো টাস্ক কেন বিলম্বিত বা ব্যর্থ হয়েছে তা বুঝতে, সিস্টেম কীভাবে আপনার টাস্কগুলো শিডিউল করেছে সে সম্পর্কে আপনার ধারণা থাকা প্রয়োজন।

এই কাজে সাহায্য করার জন্য, WorkManager-এ স্থানীয়ভাবে ডিবাগ করতে এবং পারফরম্যান্স অপ্টিমাইজ করতে সাহায্য করার মতো বেশ কিছু টুল রয়েছে (এগুলোর মধ্যে কয়েকটি JobScheduler-এর জন্যও কাজ করে)! WorkManager ব্যবহার করার সময় আপনি যে কয়েকটি সাধারণ পরিস্থিতির সম্মুখীন হতে পারেন, তার একটি ব্যাখ্যা এবং সেগুলো ডিবাগ করার জন্য ব্যবহারযোগ্য টুলগুলোর বিবরণ নিচে দেওয়া হলো।

নির্ধারিত কাজ কেন সম্পাদিত হচ্ছে না তা ডিবাগ করা হচ্ছে

নির্ধারিত কাজ বিলম্বিত হওয়া বা একেবারেই সম্পাদিত না হওয়ার একাধিক কারণ থাকতে পারে, যার মধ্যে রয়েছে নির্দিষ্ট সীমাবদ্ধতা পূরণ না হওয়া অথবা সিস্টেম কর্তৃক সীমাবদ্ধতা আরোপ করা

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

এই সিনারিওটি ​​ডিবাগ করার জন্য বেশ কিছু টুল রয়েছে।

পটভূমি টাস্ক পরিদর্শক

ব্যাকগ্রাউন্ড টাস্ক ইন্সপেক্টর হলো অ্যান্ড্রয়েড স্টুডিও-তে সরাসরি সমন্বিত একটি শক্তিশালী টুল। এটি সমস্ত ওয়ার্কম্যানেজার টাস্ক এবং তাদের সংশ্লিষ্ট অবস্থাগুলোর (রানিং, এনকিউড, ফেইলড, সাকসিডেড) একটি ভিজ্যুয়াল উপস্থাপনা প্রদান করে।

ব্যাকগ্রাউন্ড টাস্ক ইন্সপেক্টর ব্যবহার করে নির্ধারিত কাজ কেন চলছে না তা ডিবাগ করতে, তালিকাভুক্ত কাজের স্ট্যাটাসগুলো দেখুন। 'এনকিউড' স্ট্যাটাস নির্দেশ করে যে আপনার কাজটি নির্ধারিত হয়েছিল, কিন্তু এখনও চলার জন্য অপেক্ষা করছে।

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

ছবি.png

ব্যাকগ্রাউন্ড টাস্ক ইন্সপেক্টর তালিকা দৃশ্য

ছবি.png

ব্যাকগ্রাউন্ড টাস্ক ইন্সপেক্টর গ্রাফ ভিউ

adb shell dumpsys jobscheduler

এই কমান্ডটি নির্দিষ্ট সীমাবদ্ধতা এবং সিস্টেম-আরোপিত সীমাবদ্ধতাসহ সমস্ত সক্রিয় JobScheduler জবের (যার মধ্যে WorkManager Workers অন্তর্ভুক্ত) একটি তালিকা ফেরত দেয়। এটি জবের ইতিহাসও ফেরত দেয়।

আপনার নির্ধারিত কাজ এবং সংশ্লিষ্ট সীমাবদ্ধতাগুলো ভিন্ন উপায়ে দেখার জন্য এটি ব্যবহার করুন। WorkManager 2.10.0-এর পূর্ববর্তী সংস্করণগুলোর জন্য, adb shell dumpsys jobscheduler এই নামের Workers-দের একটি তালিকা ফেরত দেবে:

  [package name]/androidx.work.impl.background.systemjob.SystemJobService

আপনার অ্যাপে একাধিক ওয়ার্কার থাকলে, WorkManager 2.10.0-এ আপডেট করলে আপনি ওয়ার্কারদের নাম দেখতে এবং তাদের মধ্যে সহজেই পার্থক্য করতে পারবেন:

  #WorkerName#@[package name]/androidx.work.impl.background.systemjob.SystemJobService

সুবিধা: সিস্টেম-আরোপিত কোনো সীমাবদ্ধতা ছিল কিনা তা বোঝার জন্য এই কমান্ডটি কার্যকর, যা আপনি ব্যাকগ্রাউন্ড টাস্ক ইন্সপেক্টর দিয়ে নির্ধারণ করতে পারবেন না। উদাহরণস্বরূপ, এটি আপনার অ্যাপের স্ট্যান্ডবাই বাকেট রিটার্ন করবে, যা নির্ধারিত কাজ সম্পন্ন হওয়ার সময়সীমাকে প্রভাবিত করতে পারে।

ডিবাগ লগিং সক্ষম করুন

আপনি কাস্টম লগিং চালু করে WorkManager-এর বিস্তারিত লগ দেখতে পারেন, যার সাথে WM— সংযুক্ত থাকবে।

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

কাজের তথ্য। থামার কারণ

যদি আপনি কোনো নির্দিষ্ট ওয়ার্কারের অপ্রত্যাশিত পারফরম্যান্স লক্ষ্য করেন, তাহলে WorkInfo.getStopReason ব্যবহার করে পূর্ববর্তী রান প্রচেষ্টায় আপনার ওয়ার্কারটি কেন বন্ধ হয়েছিল, তার কারণ প্রোগ্রাম্যাটিকভাবে পর্যবেক্ষণ করতে পারেন।

আপনার কাজটি ব্যাকগ্রাউন্ডের সীমাবদ্ধতা, বাধা, ঘন ঘন টাইমআউট, বা এমনকি ব্যবহারকারীর দ্বারা বন্ধ করে দেওয়ার কারণে প্রভাবিত হচ্ছে কিনা তা শনাক্ত করতে, getWorkInfoByIdFlow ব্যবহার করে WorkInfo পর্যবেক্ষণ করার জন্য আপনার অ্যাপটি কনফিগার করা একটি ভালো অভ্যাস।

সুবিধা: আপনি আপনার কর্মীদের কর্মক্ষমতা সম্পর্কে মাঠ পর্যায়ের তথ্য সংগ্রহ করতে WorkInfo.StopReason ব্যবহার করতে পারেন।

অ্যান্ড্রয়েড ভাইটালস দ্বারা চিহ্নিত WorkManager-অ্যাট্রিবিউটেড উচ্চ ওয়েক লক সময়কাল ডিবাগ করা হচ্ছে

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

অ্যান্ড্রয়েড ভাইটালস ড্যাশবোর্ড

প্রথমে অ্যান্ড্রয়েড ভাইটালস এক্সেসিভ ওয়েক লক ড্যাশবোর্ডে নিশ্চিত করুন যে, দীর্ঘ ওয়েক লক সময়কালটি ওয়ার্কম্যানেজারের কারণে হচ্ছে , কোনো অ্যালার্ম বা অন্য কোনো ওয়েক লকের কারণে নয়। কোন ওয়েক লকগুলো ওয়ার্কম্যানেজারের কারণে চালু আছে তা বোঝার জন্য আপনি ‘অন্যান্য এপিআই দ্বারা তৈরি ওয়েক লক শনাক্তকরণ ’ ডকুমেন্টেশনটি ব্যবহার করতে পারেন।

পারফেট্টো

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

“ডিভাইস স্টেট: জবস” ট্র্যাকের অধীনে, আপনি এক্সিকিউট হওয়া যেকোনো ওয়ার্কার এবং তাদের সংশ্লিষ্ট ওয়েক লকগুলো দেখতে পারেন।

ডিভাইসস্টেট.png

পারফেটোর ডিভাইস স্টেট সেকশনে CleanupWorker এবং BlurWorker-এর এক্সিকিউশন দেখানো হচ্ছে।

সম্পদ

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

এবং এই পদ্ধতিগুলোর কয়েকটি হাতে-কলমে চেষ্টা করতে ও WorkManager ডিবাগিং সম্পর্কে আরও জানতে, Advanced WorkManager and Testing কোডল্যাবটি দেখুন।

পরবর্তী পদক্ষেপ

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

অ্যান্ড্রয়েডকে জিজ্ঞাসা করুন

শুক্রবারে আমরা পারফরম্যান্সের উপর একটি লাইভ AMA আয়োজন করছি। #AskAndroid ব্যবহার করে এখনই আপনার প্রশ্ন করুন এবং বিশেষজ্ঞদের কাছ থেকে তার উত্তর জেনে নিন।

চ্যালেঞ্জ

সোমবার আমরা আপনাকে R8 সক্রিয় করার জন্য আহ্বান জানিয়েছিলাম। আজ আমরা আপনার অ্যাপের জন্য একটি বেসলাইন প্রোফাইল তৈরি করতে বলছি।

Android Studio Otter- এর বেসলাইন প্রোফাইল জেনারেটর মডিউল উইজার্ড এই কাজটি আগের চেয়েও সহজ করে তোলে। আপনার সবচেয়ে গুরুত্বপূর্ণ ইউজার জার্নিটি বেছে নিন—এমনকি সেটি যদি শুধু আপনার অ্যাপ চালু হওয়া এবং লগইনও হয়—এবং একটি প্রোফাইল তৈরি করুন।

একবার এটি পেয়ে গেলে, CompilationMode.None এবং CompilationMode.Partial মধ্যে তুলনা করার জন্য একটি ম্যাক্রোবেঞ্চমার্ক চালান।

#optimizationEnabled হ্যাশট্যাগ ব্যবহার করে সোশ্যাল মিডিয়ায় আপনার স্টার্টআপের সময় উন্নত করার উপায়গুলো শেয়ার করুন।

আগামীকাল দেখতে থাকুন।

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

আগামীকাল আমাদের সাথে যোগ দিন চতুর্থ দিনে: পারফরম্যান্স লেভেলিং গাইড , যেখানে আমরা প্লে ভাইটালস-এর ফিল্ড ডেটা থেকে শুরু করে পারফেট্টো-র মাধ্যমে গভীর লোকাল ট্রেসিং পর্যন্ত, আপনার সাফল্য পরিমাপ করার সঠিক পদ্ধতিগুলো বিস্তারিতভাবে তুলে ধরব।

    লিখেছেন:

    পড়তে থাকুন