সেবা কর্মীরা

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

হ্যালো সেবা কর্মীরা

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

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

একটি সেবা কর্মী নিবন্ধন

কোনও পরিষেবা কর্মী আপনার পৃষ্ঠার নিয়ন্ত্রণ নেওয়ার আগে, এটি অবশ্যই আপনার PWA-এর জন্য নিবন্ধিত হতে হবে। অর্থাৎ প্রথমবার যখন কোনো ব্যবহারকারী আপনার PWA-তে আসবে, নেটওয়ার্ক অনুরোধ সরাসরি আপনার সার্ভারে যাবে কারণ পরিষেবা কর্মী এখনও আপনার পৃষ্ঠাগুলির নিয়ন্ত্রণে নেই৷

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

if ('serviceWorker' in navigator) {
   navigator.serviceWorker.register("/serviceworker.js");
}

একজন পরিষেবা কর্মী নিবন্ধিত কিনা তা যাচাই করুন

একজন পরিষেবা কর্মী নিবন্ধিত কিনা তা যাচাই করতে, আপনার প্রিয় ব্রাউজারে বিকাশকারী সরঞ্জামগুলি ব্যবহার করুন৷

Firefox এবং Chromium-ভিত্তিক ব্রাউজারে (Microsoft Edge, Google Chrome, বা Samsung Internet):

  1. বিকাশকারী সরঞ্জামগুলি খুলুন, তারপরে অ্যাপ্লিকেশন ট্যাবে ক্লিক করুন৷
  2. বাম ফলকে, পরিষেবা কর্মী নির্বাচন করুন।
  3. পরিসেবা কর্মীর স্ক্রিপ্ট URL "সক্রিয়" স্ট্যাটাস সহ উপস্থিত হয় তা পরীক্ষা করুন৷ (আপনি এই অধ্যায়ে জীবনচক্র বিভাগে এই অবস্থার অর্থ কী তা শিখবেন)। ফায়ারফক্সে স্ট্যাটাস "চলমান" বা "থেমে গেছে" হতে পারে।

সাফারিতে:

  1. ডেভেলপ মেনুতে ক্লিক করুন তারপর সার্ভিস ওয়ার্কার্স সাবমেনুতে।
  2. বর্তমান উত্স সহ একটি এন্ট্রি সাবমেনুতে উপস্থিত হয় তা পরীক্ষা করুন৷ এটি পরিষেবা কর্মীর প্রসঙ্গে একজন পরিদর্শককে খোলে।
Chrome, Firefox এবং Safari-এ পরিষেবা কর্মী ডেভেলপার টুল।
Chrome, Firefox এবং Safari-এ পরিষেবা কর্মী ডেভেলপার টুল।

ব্যাপ্তি

আপনার পরিসেবা কর্মী যে ফোল্ডারে বসেন সেটি তার পরিধি নির্ধারণ করে। example.com/my-pwa/sw.js এ বসবাসকারী একজন পরিষেবা কর্মী my-pwa পথে বা নীচের যেকোন নেভিগেশন নিয়ন্ত্রণ করতে পারেন, যেমন example.com/my-pwa/demos/ । পরিষেবা কর্মীরা তাদের সুযোগে শুধুমাত্র আইটেমগুলি (পৃষ্ঠা, কর্মী, সম্মিলিতভাবে "ক্লায়েন্ট") নিয়ন্ত্রণ করতে পারে। স্কোপ ব্রাউজার ট্যাব এবং PWA উইন্ডোতে প্রযোজ্য।

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

সাফারির আরও জটিল স্কোপ ম্যানেজমেন্ট রয়েছে, যা পার্টিশন নামে পরিচিত, আপনার ক্রস-ডোমেন আইফ্রেম থাকলে স্কোপগুলি কীভাবে কাজ করে তা প্রভাবিত করে। WebKit এর বাস্তবায়ন সম্পর্কে আরও পড়তে, তাদের ব্লগ পোস্ট পড়ুন।

জীবনচক্র

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

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

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

আপনি self অবজেক্ট ব্যবহার করে পরিষেবা কর্মীর গ্লোবাল স্কোপের ইভেন্ট শুনতে পারেন।

serviceworker.js

// This code executes in its own worker or thread
self.addEventListener("install", event => {
   console.log("Service worker installed");
});
self.addEventListener("activate", event => {
   console.log("Service worker activated");
});

একজন পরিষেবা কর্মী আপডেট করা হচ্ছে

যখন ব্রাউজার সনাক্ত করে যে পরিষেবা কর্মী বর্তমানে ক্লায়েন্টকে নিয়ন্ত্রণ করছে এবং একই ফাইলের নতুন (আপনার সার্ভার থেকে) সংস্করণ বাইট-ভিন্ন।

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

সেবা কর্মীর জীবনকাল

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

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

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

ক্ষমতা

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

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

সম্পদ