কখনও কখনও একটি বগি পরিষেবা কর্মী মোতায়েন করা হয়, এবং তারপর সমস্যা হয়. উদাহরণস্বরূপ, একজন পরিষেবা কর্মী নিবন্ধনের সময় পার্স করা হতে পারে এবং সফলভাবে ইনস্টলেশন সম্পূর্ণ করতে পারে। তবুও, একটি fetch
ইভেন্টে বগি কোডের কারণে এটি অনুরোধে সাড়া না দিতে পারে, ফলে একটি ফাঁকা পৃষ্ঠা হতে পারে। আরেকটি সম্ভাবনা হল যে পৃষ্ঠা মার্কআপ আক্রমনাত্মকভাবে ক্যাশে করা হয়, এবং একজন পরিষেবা কর্মী শুধুমাত্র পরবর্তী ভিজিটগুলির জন্য একটি Cache
উদাহরণ থেকে বাসি মার্কআপ প্রতিক্রিয়া প্রদান করে।
এমন অনেক উপায় রয়েছে যেগুলি একজন পরিষেবা কর্মী ব্যাকফায়ার করতে পারে এবং এটি একটি প্রোডাকশন ওয়েবসাইটে থাকা একটি ভীতিকর সমস্যা। তবুও সব হারিয়ে যায় না। পরিস্থিতি ঠিক করার এবং ট্র্যাকে ফিরে আসার উপায় রয়েছে।
একজন নো-অপ সার্ভিস কর্মী মোতায়েন করুন
একটি বগি পরিষেবা কর্মীকে মোকাবেলা করার জন্য সাধারণত যা লাগে তা হল একটি বেসিক নো-অপ সার্ভিস কর্মী মোতায়েন করা যেটি ইভেন্ট fetch
ছাড়াই অবিলম্বে ইনস্টল এবং সক্রিয় করে:
// sw.js
self.addEventListener('install', () => {
// Skip over the "waiting" lifecycle state, to ensure that our
// new service worker is activated immediately, even if there's
// another tab open controlled by our older service worker code.
self.skipWaiting();
});
self.addEventListener('activate', () => {
// Optional: Get a list of all the current open windows/tabs under
// our service worker's control, and force them to reload.
// This can "unbreak" any open windows/tabs as soon as the new
// service worker activates, rather than users having to manually reload.
self.clients.matchAll({
type: 'window'
}).then(windowClients => {
windowClients.forEach((windowClient) => {
windowClient.navigate(windowClient.url);
});
});
});
এই পরিষেবা কর্মী install
ইভেন্টে self.skipWaiting()
কল করে অবিলম্বে ইনস্টল এবং সক্রিয় করবে৷ ঐচ্ছিকভাবে, পরিষেবা কর্মী নিয়ন্ত্রণ করছে এমন একটি WindowClient
সাথে অন্য কোনো খোলা ট্যাব জোরপূর্বক পুনরায় লোড করতে activate
ইভেন্টে অতিরিক্ত কোড স্থাপন করা যেতে পারে।
এটা খুবই গুরুত্বপূর্ণ যে একজন নো-অপ সার্ভিস ওয়ার্কারে fetch
ইভেন্ট হ্যান্ডলার নেই। যখন কোনও পরিষেবা কর্মী অনুরোধগুলি পরিচালনা করেন না, তখন সেই অনুরোধগুলি ব্রাউজারে চলে যায় যেন কোনও পরিষেবা কর্মী উপস্থিত ছিল না। একবার একটি নো-অপ সার্ভিস কর্মী নিযুক্ত করা হলে, বগি পরিষেবা কর্মীকে স্থির করা যেতে পারে এবং পরে আপডেট হিসাবে স্থাপন করা যেতে পারে।
এই পদ্ধতিটি আংশিকভাবে কাজ করে কারণ ব্রাউজারগুলির HTTP ক্যাশে পরিষেবা কর্মীদের রাখার বিরুদ্ধে শক্তিশালী সুরক্ষা রয়েছে এবং কারণ তারা আপডেটের জন্য পরিষেবা কর্মীদের বিষয়বস্তুগুলির বাইট-ফর-বাইট চেক করে৷ এই ডিফল্টগুলি সমস্যাটি দ্রুত সমাধান করার জন্য একটি বগি পরিষেবা কর্মীর জন্য একটি নো-অপ রিপ্লেসমেন্ট স্থাপন করা সম্ভব করে।
অতিরিক্ত ব্যবস্থা নিতে হবে
একটি নো-অপ সার্ভিস কর্মী মোতায়েন করা একটি বগিকে নিরপেক্ষ করার জন্য যথেষ্ট হওয়া উচিত, তবে প্রয়োজনে অতিরিক্ত ব্যবস্থা নেওয়া যেতে পারে।
আপনি যদি পুরানো পরিষেবা কর্মীর URL না জানেন?
কখনও কখনও পূর্বে ইনস্টল করা পরিষেবা কর্মীর URL অজানা থাকে৷ এটি হতে পারে কারণ এটি সংস্করণযুক্ত (উদাহরণস্বরূপ এটির ফাইলের নামে একটি হ্যাশ রয়েছে)। এই ক্ষেত্রে নিবন্ধিত হতে পারে এমন প্রতিটি পুরানো পরিষেবা কর্মীর URL-এর সাথে মেলে এমন একজন নো-অপ পরিষেবা কর্মী নিয়োগ করা একটি চ্যালেঞ্জ হতে পারে৷ এটি সর্বোত্তম অনুশীলনের বিরুদ্ধে যায় , কারণ বিকাশকারীরা সম্ভবত প্রতিটি পরিষেবা কর্মী সংস্করণের জন্য প্রতিটি হ্যাশ মনে রাখবেন না যা স্থাপন করা হয়েছিল।
সৌভাগ্যবশত, একটি সহায়ক HTTP অনুরোধ শিরোনাম একটি পরিষেবা কর্মী স্ক্রিপ্টের জন্য একটি অনুরোধের সাথে পাঠানো হয়: Service-Worker
। ওয়েব সার্ভারে, এই শিরোনামটি পরীক্ষা করুন এবং পরিবর্তে একটি নো-অপ পরিষেবা কর্মীকে পরিবেশন করার অনুরোধটি আটকান৷ এই কৃতিত্বটি সম্পন্ন করা ওয়েব সার্ভার এবং ব্যবহৃত ব্যাকএন্ড স্ট্যাকের উপর নির্ভর করে, তাই কীভাবে এটি করতে হয় তার প্রাসঙ্গিক ভাষার ডকুমেন্টেশনের সাথে পরামর্শ করুন।
ভবিষ্যত পরিসেবা কর্মী নিয়োগের জন্য, পরিবর্তনবিহীন সম্পদের নাম (উদাহরণস্বরূপ, sw.js
) দিয়ে আটকে দিন। এটি পরে জিনিসগুলিকে অনেক কম জটিল করে তুলবে।
একটি Clear-Site-Data
হেডার সেট করুন
কিছু ব্রাউজার একটি মূলের জন্য সমস্ত পরিষেবা কর্মীদের নিবন্ধনমুক্ত করবে যদি 'storage'
মান সহ একটি Clear-Site-Data
প্রতিক্রিয়া শিরোনাম সেট করা থাকে। যাইহোক, এই পদ্ধতির সাথে সচেতন হওয়ার কয়েকটি বিষয় রয়েছে:
- সতর্ক থাকুন যে এটি সংশ্লিষ্ট উত্সের জন্য সমস্ত সঞ্চয়স্থান সাফ করবে৷ এতে
localStorage
, ইনডেক্সডডিবি,sessionStorage
এবং অন্যান্য স্টোরেজ অন্তর্ভুক্ত রয়েছে (কিন্তু মূলের জন্য HTTP ক্যাশে নয়)। - এই শিরোনামটি সমস্ত ব্রাউজারে সমর্থিত নয় ।
কারণ এই হেডারের জন্য সমর্থন মোট নয়, সমস্যা সমাধানের জন্য এটি একা নির্ভর করা যাবে না। তাই Clear-Site-Data
নো-অপ সার্ভিস কর্মী মোতায়েন করার পাশাপাশি নেওয়া একটি পরিমাপ হিসাবে দেখাই উত্তম।
ক্ষতি স্থায়ী নয়
এটি ভীতিকর হতে পারে যখন কোনও বগি পরিষেবা কর্মী দ্বারা ব্যবহারকারীর অভিজ্ঞতা ব্যাহত হয় - বিশেষ করে বড় এবং সুপরিচিত ওয়েবসাইটগুলির জন্য - তবে ক্ষতিটি অস্থায়ী এবং বিপরীত হয়!
পরিস্থিতি ঠিক করার জন্য যদি একজন নো-অপ সার্ভিস কর্মীকে মোতায়েন করার প্রয়োজন হয়, তাহলে ঠিক কী ভুল হয়েছে তা খুঁজে বের করার জন্য সময় নিন। ভবিষ্যতে, নিশ্চিত করুন যে একজন পরিষেবা কর্মী শুধুমাত্র সেই অনুরোধগুলি পরিচালনা করছেন যা তার প্রত্যাশিত। স্টেজিংয়ে ঘন ঘন পরীক্ষা করুন এবং আত্মবিশ্বাসী হলেই আপডেটগুলি স্থাপন করুন।