অ্যাপের মাধ্যমে জেনারেট হওয়া নেটওয়ার্ক ট্রাফিক ডিভাইসের ব্যাটারির আয়ুর উপর উল্লেখযোগ্য প্রভাব ফেলতে পারে। সেই ট্রাফিক অপ্টিমাইজ করতে, আপনাকে এটি পরিমাপ করতে হবে এবং এর সোর্স শনাক্ত করতে হবে। ব্যবহারকারীর অ্যাকশন, আপনার অ্যাপ কোড অথবা আপনার অ্যাপের সাথে যোগাযোগকারী সার্ভার থেকে সরাসরি নেটওয়ার্ক রিকোয়েস্ট আসতে পারে।
এই বিষয় থেকে আপনি জানতে পারবেন যে কীভাবে নেটওয়ার্ক ট্রাফিক মনিটর ও ক্যাটেগরাইজ করতে হয় এবং সমস্যা শনাক্ত ও সমাধান করার ব্যাপারে নির্দেশিকা প্রদান করে।
অনুরোধ মনিটর করতে নেটওয়ার্ক প্রোফাইলার ব্যবহার করুন
আপনার অ্যাপ্লিকেশনের নেটওয়ার্ক অনুরোধ ট্র্যাক করতে নেটওয়ার্ক প্রোফাইলার ব্যবহার করুন। আপনার অ্যাপ কীভাবে এবং কখন ডেটা ট্রান্সফার করে তা আপনি মনিটর করতে এবং সেই অনুযায়ী অন্তর্নিহিত কোড অপ্টিমাইজ করতে পারবেন।
ছবি ১. নেটওয়ার্ক ট্রাফিক ট্র্যাক করা। নেটওয়ার্ক ট্রাফিক প্যাটার্ন থেকে বোঝা যায় যে
অনুরোধ প্রিফেচ করা বা আপলোড বান্ডেল করার মাধ্যমে
দক্ষতা নাটকীয়ভাবে উন্নত করা যেতে পারে।
আপনার ডেটা ট্রান্সফারের ফ্রিকোয়েন্সি এবং প্রতিটি কানেকশনের সময় ট্রান্সফার করা ডেটার পরিমাণ মনিটর করার মাধ্যমে, আপনি নিজের অ্যাপ্লিকেশনের সেইসব অংশ শনাক্ত করতে পারবেন যেগুলি আরও ব্যাটারি-সাশ্রয়ী করা যেতে পারে। সাধারণত, আপনি এমন ছোট স্পাইক খুঁজবেন যা বিলম্বিত হতে পারে।
ট্রান্সফার স্পাইকের কারণ আরও ভালোভাবে শনাক্ত করতে, ট্রাফিক স্ট্যাটাস API আপনাকে
TrafficStats.setThreadStatsTag()
ব্যবহার করে
প্রদত্ত থ্রেডের মধ্যে সকেট থেকে হওয়া ডেটা ট্রান্সফার ট্যাগ করার সুবিধা দেয়।
এই ফাংশন কল করলে, কোনও নির্দিষ্ট থ্রেডের জন্য সব ট্রাফিক অটোমেটিক ট্যাগ হয় না;
সকেটে ট্যাগ প্রয়োগ করতে হয়।
থ্রেড ট্যাগ সেট করা হয়ে গেলে, আপনি
TrafficStats.tagSocket()
এবং
TrafficStats.untagSocket()
ব্যবহার করে
ম্যানুয়ালি আলাদা আলাদা সকেট ট্যাগ ও আনট্যাগ করতে পারবেন।
থ্রেডে সকেট খোলা হলে বা সার্ভার সকেট কানেকশন গ্রহণ করলে, ট্যাগও প্রয়োগ করা হয়।
একাধিক থ্রেড একই সকেট একই সাথে অ্যাক্সেস করলে, নেটওয়ার্ক প্যাকেট পাঠানো বা পাওয়ার সময় সকেটে যে ট্যাগ ছিল সেটি ব্যবহার করা হবে (বাফারিং ও আবার ট্রান্সমিট করার কারণে ব্যবহারকারীর ডেটা লেখা বা পড়ার সময়ের থেকে এটি আলাদা হতে পারে)।
যেমন, বিভিন্ন ধরনের নেটওয়ার্ক ট্রাফিক দেখানোর জন্য আপনি কনস্ট্যান্ট সংজ্ঞায়িত করতে পারেন, যেমনটি নিম্নলিখিত কোড স্যাম্পেলে দেখানো হয়েছে:
Kotlin
const val USER_INITIATED = 0x1000 const val APP_INITIATED = 0x2000 const val SERVER_INITIATED = 0x3000
জাভা
public static final int USER_INITIATED = 0x1000; public static final int APP_INITIATED = 0x2000; public static final int SERVER_INITIATED = 0x3000;
তারপর আপনি সেই অনুযায়ী নেটওয়ার্ক অনুরোধ ট্যাগ করতে পারবেন:
Kotlin
TrafficStats.setThreadStatsTag(USER_INITIATED) TrafficStats.tagSocket(outputSocket) // Transfer data using socket TrafficStats.untagSocket(outputSocket)
জাভা
TrafficStats.setThreadStatsTag(USER_INITIATED); TrafficStats.tagSocket(outputSocket); // Transfer data using socket TrafficStats.untagSocket(outputSocket);
HttpURLConnection
লাইব্রেরি বর্তমান
TrafficStats.getThreadStatsTag()
ভ্যালুর উপর ভিত্তি করে সকেট অটোমেটিক ট্যাগ করে। এছাড়াও, লাইব্রেরি সকেট ট্যাগ ও আনট্যাগ করে যখন কিপ-অ্যালাইভ পুলের মাধ্যমে রিসাইকেল করা হয়,
যেমন নিম্নলিখিত কোড স্যাম্পেলে দেখানো হয়েছে:
Kotlin
class IdentifyTransferSpikeTask { @WorkerThread fun request(url: String) { TrafficStats.setThreadStatsTag(APP_INITIATED) // Make network request using HttpURLConnection.connect() ... TrafficStats.clearThreadStatsTag() } }
জাভা
public class IdentifyTransferSpikeTask { @WorkerThread public void request(String url) { TrafficStats.setThreadStatsTag(APP_INITIATED); // Make network request using HttpURLConnection.connect() ... TrafficStats.clearThreadStatsTag(); } }
নেটওয়ার্ক ট্রাফিকের ধরন বিশ্লেষণ করা
আপনার অ্যাপের মাধ্যমে জেনারেট হওয়া নেটওয়ার্ক ট্রাফিক দেখার সময়, আপনাকে ট্রাফিকের সোর্স বুঝতে হবে যাতে আপনি এটি যথাযথভাবে অপ্টিমাইজ করতে পারেন। আপনার অ্যাপের মাধ্যমে ঘন ঘন নেটওয়ার্ক অ্যাক্টিভিটি তৈরি হওয়া সম্পূর্ণভাবে উপযুক্ত হতে পারে যদি এটি ব্যবহারকারীর অ্যাকশনের উত্তর দেয়, কিন্তু আপনার অ্যাপ ফোরগ্রাউন্ডে না থাকলে বা ডিভাইস পকেট বা পার্সে থাকলে তা সম্পূর্ণভাবে অনুপযুক্ত।
ব্যবহারকারীর শুরু করা ট্রাফিক বিশ্লেষণ করা
ব্যবহারকারীর শুরু করা নেটওয়ার্ক ট্রাফিক দক্ষতার সাথে একসাথে গ্রুপ করা হতে পারে যখন একজন ব্যবহারকারী আপনার অ্যাপের মধ্যে একটি নির্দিষ্ট টাস্ক পারফর্ম করছেন, অথবা অসমভাবে ছড়িয়ে পড়েছেন কারণ ব্যবহারকারী অতিরিক্ত তথ্য অনুরোধ করেন যা আপনার অ্যাপের প্রয়োজন। ব্যবহারকারীর শুরু করা নেটওয়ার্ক ট্রাফিক বিশ্লেষণ করার সময় আপনার লক্ষ্য হল, সময়ের সাথে সাথে ঘন ঘন নেটওয়ার্ক ব্যবহারের প্যাটার্ন খুঁজে বের করা এবং অনুরোধগুলি একসাথে গ্রুপ করে তাদের ফ্রিকোয়েন্সি কমানোর চেষ্টা করা।
ব্যবহারকারীর অনুরোধের অনিশ্চয়তার কারণে আপনার অ্যাপে এই ধরনের নেটওয়ার্কের ব্যবহার অপ্টিমাইজ করা চ্যালেঞ্জিং হয়ে ওঠে। এছাড়াও, ব্যবহারকারীরা যখন কোনও অ্যাপ সক্রিয়ভাবে ব্যবহার করেন, তখন তারা দ্রুত উত্তর আশা করেন, তাই দক্ষতার জন্য অনুরোধে দেরি করলে ব্যবহারকারীর অভিজ্ঞতা খারাপ হতে পারে। সাধারণত, ব্যবহারকারী সরাসরি আপনার অ্যাপের সাথে ইন্টার্যাক্ট করার সময়, নেটওয়ার্কের দক্ষ ব্যবহারের চেয়ে ব্যবহারকারীকে দ্রুত উত্তর দেওয়ার বিষয়টিকে আপনার অগ্রাধিকার দেওয়া উচিত।
ব্যবহারকারীর শুরু করা ট্রাফিক অপ্টিমাইজ করার জন্য সাজেশন পেতে, ব্যবহারকারীর শুরু করা অনুরোধ অপ্টিমাইজ করুন দেখুন।
অ্যাপ-ইনিশিয়েটেড ট্রাফিক বিশ্লেষণ করা
অ্যাপ-ইনিশিয়েটেড নেটওয়ার্ক ট্রাফিক হল এমন একটি ক্ষেত্র যেখানে আপনি নেটওয়ার্ক ব্যান্ডউইথের দক্ষ ব্যবহারের উপর উল্লেখযোগ্য প্রভাব ফেলতে পারেন। আপনার অ্যাপের নেটওয়ার্ক অ্যাক্টিভিটি বিশ্লেষণ করার সময়, অ্যাক্টিভিটি না হওয়ার সময়কাল দেখুন এবং সেটি বাড়ানো যায় কিনা তা নির্ধারণ করুন। আপনার অ্যাপ থেকে একটানা নেটওয়ার্ক অ্যাক্সেসের প্যাটার্ন দেখতে পেলে, এই ট্রাফিককে ব্যাচ করার চেষ্টা করুন যাতে অ্যাক্টিভিটির সময়কালের মধ্যে ডিভাইস রেডিও কম পাওয়ার মোডে ফিরে যেতে পারে।
অ্যাপ-ইনিশিয়েটেড ট্রাফিক অপ্টিমাইজ করার জন্য সাজেশন পেতে, অ্যাপ-ইনিশিয়েটেড অনুরোধ অপ্টিমাইজ করুন বিকল্প দেখুন।
সার্ভার-ইনিশিয়েটেড ট্রাফিক বিশ্লেষণ করা
আপনার অ্যাপের সাথে যোগাযোগকারী সার্ভার দ্বারা শুরু করা নেটওয়ার্ক অ্যাক্টিভিটিও সাধারণত এমন একটি ক্ষেত্র যেখানে আপনি নেটওয়ার্ক ব্যান্ডউইথের দক্ষ ব্যবহারের উপর উল্লেখযোগ্য প্রভাব ফেলতে পারেন। Firebase Cloud Messaging (FCM) হল একটি লাইটওয়েট মেকানিজম যা সার্ভার থেকে কোনও নির্দিষ্ট অ্যাপ ইনস্ট্যান্সে ডেটা ট্রান্সমিট করতে ব্যবহার করা হয়। FCM ব্যবহার করে, আপনার সার্ভার কোনও নির্দিষ্ট ডিভাইসে চলা আপনার অ্যাপকে জানাতে পারে যে এটির জন্য নতুন ডেটা উপলভ্য আছে।
সার্ভার-ইনিশিয়েটেড ট্রাফিক অপ্টিমাইজ করার ব্যাপারে সাজেশন পেতে, সার্ভার-ইনিশিয়েটেড অনুরোধ অপ্টিমাইজ করুন দেখুন।
নেটওয়ার্ক ট্রাফিক এফেক্ট ভিজ্যুয়ালাইজ করতে Battery Historian ব্যবহার করুন
ব্যাটারি হিস্টোরিয়ান হল এমন একটি টুল যা নির্দিষ্ট সময়সীমা জুড়ে ডিভাইসের ব্যাটারি খরচ ভিজ্যুয়ালাইজ করে। আপনার নেটওয়ার্ক অ্যাক্টিভিটি ব্যাটারি খরচের উপর কীভাবে প্রভাব ফেলে তা বিশ্লেষণ করতে আপনি এই টুল ব্যবহার করতে পারবেন। যেমন, আপনার অ্যাপ প্রত্যাশার চেয়ে বেশি সেলুলার রেডিও ব্যবহার করছে কিনা তা Battery Historian আপনাকে দেখাতে পারে। Battery Historian ব্যবহার করার ব্যাপারে আরও তথ্যের জন্য, Batterystats এবং Battery Historian-এর মাধ্যমে ব্যাটারির ব্যবহার প্রোফাইল করা দেখুন।