ശക്തമായ വെബ് ആപ്ലിക്കേഷനുകൾക്കായി സർവീസ് വർക്കർ ലൈഫ് സൈക്കിൾ മനസ്സിലാക്കുന്നതിനും കൈകാര്യം ചെയ്യുന്നതിനുമുള്ള ഒരു സമ്പൂർണ്ണ ഗൈഡ്.
സർവീസ് വർക്കർ ലൈഫ് സൈക്കിളിൽ വൈദഗ്ദ്ധ്യം നേടാം: ഇൻസ്റ്റാളേഷൻ, ആക്ടിവേഷൻ, അപ്ഡേറ്റ് തന്ത്രങ്ങൾ
പ്രോഗ്രസ്സീവ് വെബ് ആപ്പുകളുടെ (PWA) ഒരു അടിസ്ഥാന ഘടകമാണ് സർവീസ് വർക്കറുകൾ. ഓഫ്ലൈൻ പ്രവർത്തനം, പുഷ് നോട്ടിഫിക്കേഷനുകൾ, ബാക്ക്ഗ്രൗണ്ട് സിൻക്രൊണൈസേഷൻ തുടങ്ങിയ ശക്തമായ ഫീച്ചറുകൾ ഇത് സാധ്യമാക്കുന്നു. ശക്തവും ആകർഷകവുമായ വെബ് അനുഭവങ്ങൾ നിർമ്മിക്കുന്നതിന് സർവീസ് വർക്കർ ലൈഫ് സൈക്കിൾ - ഇൻസ്റ്റാളേഷൻ, ആക്ടിവേഷൻ, അപ്ഡേറ്റുകൾ - മനസ്സിലാക്കേണ്ടത് അത്യാവശ്യമാണ്. ഈ സമഗ്രമായ ഗൈഡ് ഓരോ ഘട്ടത്തെക്കുറിച്ചും വിശദമായി പ്രതിപാദിക്കുകയും, സർവീസ് വർക്കർ കാര്യക്ഷമമായി കൈകാര്യം ചെയ്യുന്നതിനുള്ള പ്രായോഗിക ഉദാഹരണങ്ങളും തന്ത്രങ്ങളും നൽകുകയും ചെയ്യും.
എന്താണ് ഒരു സർവീസ് വർക്കർ?
പ്രധാന ബ്രൗസർ ത്രെഡിൽ നിന്ന് വേറിട്ട്, പശ്ചാത്തലത്തിൽ പ്രവർത്തിക്കുന്ന ഒരു ജാവാസ്ക്രിപ്റ്റ് ഫയലാണ് സർവീസ് വർക്കർ. ഇത് വെബ് ആപ്ലിക്കേഷൻ, ബ്രൗസർ, നെറ്റ്വർക്ക് എന്നിവയ്ക്കിടയിൽ ഒരു പ്രോക്സിയായി പ്രവർത്തിക്കുന്നു. നെറ്റ്വർക്ക് അഭ്യർത്ഥനകൾ തടസ്സപ്പെടുത്താനും, റിസോഴ്സുകൾ കാഷെ ചെയ്യാനും, ഉപയോക്താവ് ഓഫ്ലൈനിലായിരിക്കുമ്പോൾ പോലും ഉള്ളടക്കം നൽകാനും ഇത് സർവീസ് വർക്കറുകളെ അനുവദിക്കുന്നു.
നിങ്ങളുടെ വെബ് ആപ്ലിക്കേഷൻ്റെ റിസോഴ്സുകൾക്കുള്ള ഒരു ഗേറ്റ്കീപ്പറായി ഇതിനെ കണക്കാക്കാം. നെറ്റ്വർക്കിൽ നിന്ന് ഡാറ്റ ലഭ്യമാക്കണോ, കാഷെയിൽ നിന്ന് നൽകണോ, അതോ പൂർണ്ണമായും ഒരു പുതിയ റെസ്പോൺസ് ഉണ്ടാക്കണോ എന്ന് തീരുമാനിക്കാൻ ഇതിന് കഴിയും.
സർവീസ് വർക്കർ ലൈഫ് സൈക്കിൾ: ഒരു വിശദമായ അവലോകനം
സർവീസ് വർക്കർ ലൈഫ് സൈക്കിളിന് പ്രധാനമായും മൂന്ന് ഘട്ടങ്ങളുണ്ട്:
- ഇൻസ്റ്റാളേഷൻ: സർവീസ് വർക്കർ രജിസ്റ്റർ ചെയ്യുകയും അതിൻ്റെ പ്രാരംഭ കാഷിംഗ് നടത്തുകയും ചെയ്യുന്നു.
- ആക്ടിവേഷൻ: സർവീസ് വർക്കർ വെബ് പേജിൻ്റെ നിയന്ത്രണം ഏറ്റെടുക്കുകയും നെറ്റ്വർക്ക് അഭ്യർത്ഥനകൾ കൈകാര്യം ചെയ്യാൻ തുടങ്ങുകയും ചെയ്യുന്നു.
- അപ്ഡേറ്റ്: സർവീസ് വർക്കറിൻ്റെ ഒരു പുതിയ പതിപ്പ് കണ്ടെത്തുകയും അപ്ഡേറ്റ് പ്രക്രിയ ആരംഭിക്കുകയും ചെയ്യുന്നു.
1. ഇൻസ്റ്റാളേഷൻ: ഓഫ്ലൈൻ കഴിവുകൾക്കായി തയ്യാറെടുക്കുന്നു
ഇൻസ്റ്റാളേഷൻ ഘട്ടത്തിലാണ് സർവീസ് വർക്കർ അതിൻ്റെ എൻവയോൺമെൻ്റ് സജ്ജീകരിക്കുകയും ആവശ്യമായ റിസോഴ്സുകൾ കാഷെ ചെയ്യുകയും ചെയ്യുന്നത്. പ്രധാന ഘട്ടങ്ങൾ താഴെ നൽകുന്നു:
സർവീസ് വർക്കർ രജിസ്റ്റർ ചെയ്യുന്നു
നിങ്ങളുടെ പ്രധാന ജാവാസ്ക്രിപ്റ്റ് ഫയലിൽ സർവീസ് വർക്കർ രജിസ്റ്റർ ചെയ്യുക എന്നതാണ് ആദ്യപടി. ഇത് സർവീസ് വർക്കർ ഡൗൺലോഡ് ചെയ്ത് ഇൻസ്റ്റാൾ ചെയ്യാൻ ബ്രൗസറിനോട് പറയുന്നു.
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/service-worker.js')
.then(function(registration) {
console.log('Service Worker registered with scope:', registration.scope);
})
.catch(function(err) {
console.log('Service Worker registration failed:', err);
});
}
ഈ കോഡ് ബ്രൗസർ സർവീസ് വർക്കറുകളെ പിന്തുണയ്ക്കുന്നുണ്ടോ എന്ന് പരിശോധിക്കുകയും തുടർന്ന് /service-worker.js
ഫയൽ രജിസ്റ്റർ ചെയ്യുകയും ചെയ്യുന്നു. then()
, catch()
മെത്തേഡുകൾ രജിസ്ട്രേഷൻ പ്രക്രിയയുടെ വിജയവും പരാജയവും യഥാക്രമം കൈകാര്യം ചെയ്യുന്നു.
install
ഇവൻ്റ്
രജിസ്റ്റർ ചെയ്തുകഴിഞ്ഞാൽ, ബ്രൗസർ സർവീസ് വർക്കറിൽ install
ഇവൻ്റ് ട്രിഗർ ചെയ്യുന്നു. സാധാരണയായി HTML, CSS, ജാവാസ്ക്രിപ്റ്റ്, ചിത്രങ്ങൾ തുടങ്ങിയ അത്യാവശ്യ അസറ്റുകൾ പ്രീ-കാഷെ ചെയ്യുന്നത് ഇവിടെയാണ്. ഒരു ഉദാഹരണം ഇതാ:
self.addEventListener('install', function(event) {
event.waitUntil(
caches.open('my-site-cache-v1').then(function(cache) {
return cache.addAll([
'/',
'/index.html',
'/style.css',
'/app.js',
'/images/logo.png'
]);
})
);
});
നമുക്ക് ഈ കോഡ് വിശദമായി പരിശോധിക്കാം:
self.addEventListener('install', function(event) { ... });
: ഇത്install
ഇവൻ്റിനായി ഒരു ഇവൻ്റ് ലിസണർ രജിസ്റ്റർ ചെയ്യുന്നു.event.waitUntil( ... );
:waitUntil
-നുള്ളിലെ കോഡ് എക്സിക്യൂട്ട് ചെയ്തു കഴിയുന്നതുവരെ സർവീസ് വർക്കർ ഇൻസ്റ്റാളേഷൻ പൂർത്തിയാക്കുന്നില്ലെന്ന് ഇത് ഉറപ്പാക്കുന്നു. നിങ്ങളുടെ കാഷിംഗ് പൂർണ്ണമാണെന്ന് ഉറപ്പാക്കാൻ ഇത് നിർണ്ണായകമാണ്.caches.open('my-site-cache-v1').then(function(cache) { ... });
: ഇത് 'my-site-cache-v1' എന്ന് പേരുള്ള ഒരു കാഷെ സ്റ്റോറേജ് തുറക്കുന്നു. അപ്ഡേറ്റുകൾ നിർബന്ധിതമാക്കുന്നതിന് നിങ്ങളുടെ കാഷെ പേരുകൾക്ക് പതിപ്പ് നൽകുക (ഇതിനെക്കുറിച്ച് പിന്നീട് കൂടുതൽ).cache.addAll([ ... ]);
: ഇത് കാഷെയിലേക്ക് URL-കളുടെ ഒരു നിര ചേർക്കുന്നു. ഓഫ്ലൈനിൽ ലഭ്യമാകുന്ന റിസോഴ്സുകൾ ഇവയാണ്.
ഇൻസ്റ്റാളേഷൻ സമയത്ത് ശ്രദ്ധിക്കേണ്ട പ്രധാന കാര്യങ്ങൾ:
- കാഷെ പതിപ്പ് ചെയ്യൽ (Versioning): ഉപയോക്താക്കൾക്ക് നിങ്ങളുടെ അസറ്റുകളുടെ ഏറ്റവും പുതിയ പതിപ്പ് ലഭിക്കുന്നുവെന്ന് ഉറപ്പാക്കാൻ കാഷെ പതിപ്പ് ചെയ്യൽ ഉപയോഗിക്കുക. നിങ്ങൾ മാറ്റങ്ങൾ വരുത്തുമ്പോൾ കാഷെ പേര് അപ്ഡേറ്റ് ചെയ്യുക (ഉദാഹരണത്തിന്, 'my-site-cache-v1' എന്നത് 'my-site-cache-v2' ആക്കുക).
- അത്യാവശ്യ റിസോഴ്സുകൾ: ഇൻസ്റ്റാളേഷൻ സമയത്ത് അത്യാവശ്യമായ റിസോഴ്സുകൾ മാത്രം കാഷെ ചെയ്യുക. പ്രാധാന്യം കുറഞ്ഞ അസറ്റുകൾ പിന്നീട്, റൺടൈമിൽ കാഷെ ചെയ്യുന്നത് പരിഗണിക്കുക.
- പിശകുകൾ കൈകാര്യം ചെയ്യൽ (Error Handling): കാഷിംഗ് പരാജയങ്ങൾ ഭംഗിയായി കൈകാര്യം ചെയ്യാൻ ശക്തമായ എറർ ഹാൻഡ്ലിംഗ് നടപ്പിലാക്കുക. ഇൻസ്റ്റാളേഷൻ സമയത്ത് കാഷിംഗ് പരാജയപ്പെട്ടാൽ, സർവീസ് വർക്കർ ആക്ടിവേറ്റ് ആകില്ല.
- പ്രോഗ്രസ്സീവ് എൻഹാൻസ്മെൻ്റ്: സർവീസ് വർക്കർ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടാലും നിങ്ങളുടെ വെബ്സൈറ്റ് ശരിയായി പ്രവർത്തിക്കണം. അത്യാവശ്യ പ്രവർത്തനങ്ങൾക്ക് സർവീസ് വർക്കറിനെ മാത്രം ആശ്രയിക്കരുത്.
ഉദാഹരണം: അന്താരാഷ്ട്ര ഇ-കൊമേഴ്സ് സ്റ്റോർ
ഒരു അന്താരാഷ്ട്ര ഇ-കൊമേഴ്സ് സ്റ്റോർ സങ്കൽപ്പിക്കുക. ഇൻസ്റ്റാളേഷൻ സമയത്ത്, നിങ്ങൾക്ക് ഇനിപ്പറയുന്നവ കാഷെ ചെയ്യാൻ കഴിഞ്ഞേക്കാം:
- ഉൽപ്പന്ന ലിസ്റ്റിംഗ് പേജിനായുള്ള പ്രധാന HTML, CSS, ജാവാസ്ക്രിപ്റ്റ്.
- അത്യാവശ്യ ഫോണ്ടുകളും ഐക്കണുകളും.
- ഉൽപ്പന്ന ചിത്രങ്ങൾക്കായി ഒരു പ്ലെയ്സ്ഹോൾഡർ ചിത്രം (നെറ്റ്വർക്കിൽ നിന്ന് ലഭ്യമാക്കുന്ന യഥാർത്ഥ ചിത്രങ്ങൾ ഉപയോഗിച്ച് പിന്നീട് മാറ്റിച്ചേർക്കാൻ).
- ഉപയോക്താവ് തിരഞ്ഞെടുത്ത ഭാഷയ്ക്കായുള്ള പ്രാദേശികവൽക്കരണ ഫയലുകൾ (ലഭ്യമെങ്കിൽ).
ഈ റിസോഴ്സുകൾ കാഷെ ചെയ്യുന്നതിലൂടെ, ഉപയോക്താക്കൾക്ക് മോശം ഇൻ്റർനെറ്റ് കണക്ഷൻ ഉള്ളപ്പോൾ പോലും ഉൽപ്പന്ന കാറ്റലോഗ് ബ്രൗസ് ചെയ്യാൻ കഴിയുമെന്ന് നിങ്ങൾ ഉറപ്പാക്കുന്നു. ബാൻഡ്വിഡ്ത്ത് പരിമിതമായ പ്രദേശങ്ങളിലെ ഉപയോക്താക്കൾക്ക് ഇത് വളരെ മെച്ചപ്പെട്ട അനുഭവം നൽകുന്നു.
2. ആക്ടിവേഷൻ: പേജിൻ്റെ നിയന്ത്രണം ഏറ്റെടുക്കൽ
ആക്ടിവേഷൻ ഘട്ടത്തിലാണ് സർവീസ് വർക്കർ വെബ് പേജിൻ്റെ നിയന്ത്രണം ഏറ്റെടുക്കുകയും നെറ്റ്വർക്ക് അഭ്യർത്ഥനകൾ കൈകാര്യം ചെയ്യാൻ തുടങ്ങുകയും ചെയ്യുന്നത്. പഴയ കാഷെകളിൽ നിന്ന് ഡാറ്റ മൈഗ്രേറ്റ് ചെയ്യുന്നതും കാലഹരണപ്പെട്ട കാഷെകൾ വൃത്തിയാക്കുന്നതും ഇതിൽ ഉൾപ്പെടുന്നതിനാൽ ഇത് ഒരു നിർണ്ണായക ഘട്ടമാണ്.
activate
ഇവൻ്റ്
സർവീസ് വർക്കർ നിയന്ത്രണം ഏറ്റെടുക്കാൻ തയ്യാറാകുമ്പോൾ activate
ഇവൻ്റ് ട്രിഗർ ചെയ്യപ്പെടുന്നു. ഈ സമയത്താണ് ഇനിപ്പറയുന്ന കാര്യങ്ങൾ ചെയ്യേണ്ടത്:
- പഴയ കാഷെകൾ ഡിലീറ്റ് ചെയ്യുക.
- സർവീസ് വർക്കറിൻ്റെ സ്റ്റേറ്റ് അപ്ഡേറ്റ് ചെയ്യുക.
self.addEventListener('activate', function(event) {
var cacheWhitelist = ['my-site-cache-v2']; // Current cache version
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(
cacheNames.map(function(cacheName) {
if (cacheWhitelist.indexOf(cacheName) === -1) {
return caches.delete(cacheName);
}
})
);
})
);
});
ഈ കോഡ് ഇനിപ്പറയുന്ന കാര്യങ്ങൾ ചെയ്യുന്നു:
self.addEventListener('activate', function(event) { ... });
:activate
ഇവൻ്റിനായി ഒരു ഇവൻ്റ് ലിസണർ രജിസ്റ്റർ ചെയ്യുന്നു.var cacheWhitelist = ['my-site-cache-v2'];
: നിലനിർത്തേണ്ട കാഷെ പേരുകളുടെ ഒരു നിര നിർവചിക്കുന്നു. ഇതിൽ നിലവിലെ കാഷെ പതിപ്പ് ഉൾപ്പെടുത്തണം.caches.keys().then(function(cacheNames) { ... });
: എല്ലാ കാഷെ പേരുകളും വീണ്ടെടുക്കുന്നു.cacheNames.map(function(cacheName) { ... });
: ഓരോ കാഷെ പേരിലൂടെയും ആവർത്തിക്കുന്നു.if (cacheWhitelist.indexOf(cacheName) === -1) { ... }
: നിലവിലെ കാഷെ പേര് വൈറ്റ്ലിസ്റ്റിൽ ഉണ്ടോ എന്ന് പരിശോധിക്കുന്നു. ഇല്ലെങ്കിൽ, അതൊരു പഴയ കാഷെയാണ്.return caches.delete(cacheName);
: പഴയ കാഷെ ഡിലീറ്റ് ചെയ്യുന്നു.
ആക്ടിവേഷൻ സമയത്ത് ശ്രദ്ധിക്കേണ്ട പ്രധാന കാര്യങ്ങൾ:
- കാഷെ വൃത്തിയാക്കൽ: നിങ്ങളുടെ ആപ്ലിക്കേഷൻ അമിതമായി സ്റ്റോറേജ് സ്പേസ് ഉപയോഗിക്കുന്നത് തടയാൻ ആക്ടിവേഷൻ സമയത്ത് എല്ലായ്പ്പോഴും പഴയ കാഷെകൾ ഡിലീറ്റ് ചെയ്യുക.
- ക്ലയിൻ്റ് ഏറ്റെടുക്കൽ: സ്ഥിരമായി, പുതുതായി ആക്ടിവേറ്റ് ചെയ്ത ഒരു സർവീസ് വർക്കർ നിലവിലുള്ള ക്ലയിൻ്റുകളുടെ (വെബ് പേജുകൾ) നിയന്ത്രണം ഏറ്റെടുക്കില്ല, അവ റീലോഡ് ചെയ്യുകയോ സർവീസ് വർക്കറിൻ്റെ സ്കോപ്പിൽ മറ്റൊരു പേജിലേക്ക് നാവിഗേറ്റ് ചെയ്യുകയോ ചെയ്യുന്നതുവരെ.
self.clients.claim()
ഉപയോഗിച്ച് നിങ്ങൾക്ക് ഉടനടി നിയന്ത്രണം നിർബന്ധിതമാക്കാം, എന്നാൽ പഴയ സർവീസ് വർക്കർ അഭ്യർത്ഥനകൾ കൈകാര്യം ചെയ്യുകയായിരുന്നെങ്കിൽ ഇത് അപ്രതീക്ഷിത സ്വഭാവത്തിലേക്ക് നയിച്ചേക്കാം എന്നതിനാൽ ശ്രദ്ധിക്കുക. - ഡാറ്റ മൈഗ്രേഷൻ: നിങ്ങളുടെ ആപ്ലിക്കേഷൻ കാഷെയിൽ സംഭരിച്ചിരിക്കുന്ന ഡാറ്റയെ ആശ്രയിക്കുന്നുവെങ്കിൽ, ആക്ടിവേഷൻ സമയത്ത് ഈ ഡാറ്റ ഒരു പുതിയ കാഷെ ഫോർമാറ്റിലേക്ക് മൈഗ്രേറ്റ് ചെയ്യേണ്ടി വന്നേക്കാം.
ഉദാഹരണം: വാർത്താ വെബ്സൈറ്റ്
ഓഫ്ലൈൻ വായനയ്ക്കായി ലേഖനങ്ങൾ കാഷെ ചെയ്യുന്ന ഒരു വാർത്താ വെബ്സൈറ്റ് പരിഗണിക്കുക. ആക്ടിവേഷൻ സമയത്ത്, നിങ്ങൾക്ക് ഇനിപ്പറയുന്നവ ചെയ്യാൻ കഴിഞ്ഞേക്കാം:
- കാലഹരണപ്പെട്ട ലേഖനങ്ങൾ അടങ്ങിയ പഴയ കാഷെകൾ ഡിലീറ്റ് ചെയ്യുക.
- വെബ്സൈറ്റിൻ്റെ ഡാറ്റാ ഘടന മാറിയിട്ടുണ്ടെങ്കിൽ കാഷെ ചെയ്ത ലേഖന ഡാറ്റ ഒരു പുതിയ ഫോർമാറ്റിലേക്ക് മൈഗ്രേറ്റ് ചെയ്യുക.
- ഏറ്റവും പുതിയ വാർത്താ വിഭാഗങ്ങളെ പ്രതിഫലിപ്പിക്കുന്നതിനായി സർവീസ് വർക്കറിൻ്റെ സ്റ്റേറ്റ് അപ്ഡേറ്റ് ചെയ്യുക.
fetch
ഇവൻ്റ്: നെറ്റ്വർക്ക് അഭ്യർത്ഥനകൾ തടസ്സപ്പെടുത്തുന്നു
സർവീസ് വർക്കറിൻ്റെ സ്കോപ്പിനുള്ളിൽ ബ്രൗസർ ഒരു നെറ്റ്വർക്ക് അഭ്യർത്ഥന നടത്തുമ്പോഴെല്ലാം fetch
ഇവൻ്റ് ട്രിഗർ ചെയ്യപ്പെടുന്നു. ഇവിടെയാണ് സർവീസ് വർക്കറിന് അഭ്യർത്ഥനയെ തടസ്സപ്പെടുത്താനും അത് എങ്ങനെ കൈകാര്യം ചെയ്യണമെന്ന് തീരുമാനിക്കാനും കഴിയുന്നത്. സാധാരണ തന്ത്രങ്ങളിൽ ഇവ ഉൾപ്പെടുന്നു:
- കാഷെ ഫസ്റ്റ് (Cache First): ആദ്യം കാഷെയിൽ നിന്ന് റിസോഴ്സ് നൽകാൻ ശ്രമിക്കുക. അത് കണ്ടെത്തിയില്ലെങ്കിൽ, നെറ്റ്വർക്കിൽ നിന്ന് ലഭ്യമാക്കി ഭാവിയിലെ ഉപയോഗത്തിനായി കാഷെ ചെയ്യുക.
- നെറ്റ്വർക്ക് ഫസ്റ്റ് (Network First): ആദ്യം നെറ്റ്വർക്കിൽ നിന്ന് റിസോഴ്സ് ലഭ്യമാക്കാൻ ശ്രമിക്കുക. നെറ്റ്വർക്ക് ലഭ്യമല്ലെങ്കിൽ, കാഷെയിൽ നിന്ന് നൽകുക.
- കാഷെ മാത്രം (Cache Only): എല്ലായ്പ്പോഴും കാഷെയിൽ നിന്ന് റിസോഴ്സ് നൽകുക. മാറ്റം വരാൻ സാധ്യതയില്ലാത്ത അസറ്റുകൾക്ക് ഇത് ഉപയോഗപ്രദമാണ്.
- നെറ്റ്വർക്ക് മാത്രം (Network Only): എല്ലായ്പ്പോഴും നെറ്റ്വർക്കിൽ നിന്ന് റിസോഴ്സ് ലഭ്യമാക്കുക. കാലികമായിരിക്കേണ്ട ഡൈനാമിക് ഉള്ളടക്കത്തിന് ഇത് ഉപയോഗപ്രദമാണ്.
- സ്റ്റെയിൽ-വൈൽ-റീവാലിഡേറ്റ് (Stale-While-Revalidate): ഉടൻ തന്നെ കാഷെയിൽ നിന്ന് റിസോഴ്സ് നൽകുക, തുടർന്ന് പശ്ചാത്തലത്തിൽ കാഷെ അപ്ഡേറ്റ് ചെയ്യുക. കാഷെ എല്ലായ്പ്പോഴും കാലികമാണെന്ന് ഉറപ്പാക്കുമ്പോൾ തന്നെ ഇത് വേഗതയേറിയ പ്രാരംഭ പ്രതികരണം നൽകുന്നു.
കാഷെ ഫസ്റ്റ് തന്ത്രത്തിൻ്റെ ഒരു ഉദാഹരണം ഇതാ:
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request).then(function(response) {
// Cache hit - return response
if (response) {
return response;
}
// Not in cache - fetch from network
return fetch(event.request).then(
function(response) {
// Check if we received a valid response
if(!response || response.status !== 200 || response.type !== 'basic') {
return response;
}
// IMPORTANT: Clone the response. A response is a stream
// and because we want the browser to consume the response
// as well as the cache consuming the response, we need
// to clone it so we have two independent copies.
var responseToCache = response.clone();
caches.open('my-site-cache-v1')
.then(function(cache) {
cache.put(event.request, responseToCache);
});
return response;
}
);
})
);
});
വിശദീകരണം:
caches.match(event.request)
: അഭ്യർത്ഥന ഇതിനകം കാഷെയിൽ ഉണ്ടോ എന്ന് പരിശോധിക്കുന്നു.- കാഷെയിൽ കണ്ടെത്തിയാൽ (
response
ശൂന്യമല്ലെങ്കിൽ): കാഷെ ചെയ്ത പ്രതികരണം നൽകുന്നു. - കണ്ടെത്തിയില്ലെങ്കിൽ:
fetch(event.request)
: നെറ്റ്വർക്കിൽ നിന്ന് റിസോഴ്സ് ലഭ്യമാക്കുന്നു.- പ്രതികരണം സാധുവാണോ എന്ന് പരിശോധിക്കുന്നു (സ്റ്റാറ്റസ് കോഡ്, തരം).
response.clone()
: പ്രതികരണം ക്ലോൺ ചെയ്യുന്നു (ഒരു പ്രതികരണ ബോഡി ഒരു തവണ മാത്രമേ വായിക്കാൻ കഴിയൂ എന്നതിനാലാണിത്).- ക്ലോൺ ചെയ്ത പ്രതികരണം കാഷെയിലേക്ക് ചേർക്കുന്നു.
- യഥാർത്ഥ പ്രതികരണം ബ്രൗസറിന് നൽകുന്നു.
ശരിയായ ഫെച്ച് തന്ത്രം തിരഞ്ഞെടുക്കുന്നത് നിങ്ങളുടെ ആപ്ലിക്കേഷൻ്റെ പ്രത്യേക ആവശ്യകതകളെയും അഭ്യർത്ഥിക്കുന്ന റിസോഴ്സിൻ്റെ തരത്തെയും ആശ്രയിച്ചിരിക്കുന്നു. ഇനിപ്പറയുന്ന ഘടകങ്ങൾ പരിഗണിക്കുക:
- അപ്ഡേറ്റുകളുടെ ആവൃത്തി: റിസോഴ്സ് എത്ര തവണ മാറുന്നു?
- നെറ്റ്വർക്ക് വിശ്വാസ്യത: ഉപയോക്താവിൻ്റെ ഇൻ്റർനെറ്റ് കണക്ഷൻ എത്രത്തോളം വിശ്വസനീയമാണ്?
- പ്രകടന ആവശ്യകതകൾ: വേഗതയേറിയ പ്രാരംഭ പ്രതികരണം നൽകുന്നത് എത്രത്തോളം പ്രധാനമാണ്?
ഉദാഹരണം: സോഷ്യൽ മീഡിയ ആപ്ലിക്കേഷൻ
ഒരു സോഷ്യൽ മീഡിയ ആപ്ലിക്കേഷനിൽ, വ്യത്യസ്ത തരം ഉള്ളടക്കങ്ങൾക്കായി നിങ്ങൾക്ക് വ്യത്യസ്ത ഫെച്ച് തന്ത്രങ്ങൾ ഉപയോഗിക്കാം:
- ഉപയോക്താവിൻ്റെ പ്രൊഫൈൽ ചിത്രങ്ങൾ: കാഷെ ഫസ്റ്റ് (പ്രൊഫൈൽ ചിത്രങ്ങൾ താരതമ്യേന അപൂർവ്വമായി മാറുന്നതിനാൽ).
- വാർത്താ ഫീഡ്: നെറ്റ്വർക്ക് ഫസ്റ്റ് (ഉപയോക്താക്കൾക്ക് ഏറ്റവും പുതിയ അപ്ഡേറ്റുകൾ കാണുന്നുവെന്ന് ഉറപ്പാക്കാൻ). സുഗമമായ അനുഭവത്തിനായി സ്റ്റെയിൽ-വൈൽ-റീവാലിഡേറ്റിനൊപ്പം സംയോജിപ്പിക്കാൻ സാധ്യതയുണ്ട്.
- സ്റ്റാറ്റിക് അസറ്റുകൾ (CSS, ജാവാസ്ക്രിപ്റ്റ്): കാഷെ മാത്രം (ഇവ സാധാരണയായി പതിപ്പുകളുള്ളതും അപൂർവ്വമായി മാറുന്നതുമാണ്).
3. അപ്ഡേറ്റ്: നിങ്ങളുടെ സർവീസ് വർക്കർ ഏറ്റവും പുതിയതായി നിലനിർത്തുന്നു
സർവീസ് വർക്കർ ഫയലിൽ ഒരു മാറ്റം കണ്ടെത്തുമ്പോൾ ബ്രൗസർ അത് യാന്ത്രികമായി അപ്ഡേറ്റ് ചെയ്യുന്നു. സാധാരണയായി ഉപയോക്താവ് വെബ്സൈറ്റ് വീണ്ടും സന്ദർശിക്കുമ്പോഴോ അല്ലെങ്കിൽ ബ്രൗസർ പശ്ചാത്തലത്തിൽ അപ്ഡേറ്റുകൾക്കായി പരിശോധിക്കുമ്പോഴോ ഇത് സംഭവിക്കുന്നു.
അപ്ഡേറ്റുകൾ കണ്ടെത്തുന്നു
നിലവിലുള്ള സർവീസ് വർക്കർ ഫയലിനെ ഇതിനകം രജിസ്റ്റർ ചെയ്ത ഫയലുമായി താരതമ്യം ചെയ്താണ് ബ്രൗസർ അപ്ഡേറ്റുകൾക്കായി പരിശോധിക്കുന്നത്. ഫയലുകൾ വ്യത്യസ്തമാണെങ്കിൽ (ഒരു ബൈറ്റിൻ്റെ വ്യത്യാസമുണ്ടെങ്കിൽ പോലും), ബ്രൗസർ അതൊരു അപ്ഡേറ്റായി കണക്കാക്കുന്നു.
അപ്ഡേറ്റ് പ്രക്രിയ
ഒരു അപ്ഡേറ്റ് കണ്ടെത്തുമ്പോൾ, ബ്രൗസർ ഇനിപ്പറയുന്ന ഘട്ടങ്ങളിലൂടെ കടന്നുപോകുന്നു:
- പുതിയ സർവീസ് വർക്കർ ഫയൽ ഡൗൺലോഡ് ചെയ്യുന്നു.
- പുതിയ സർവീസ് വർക്കർ ഇൻസ്റ്റാൾ ചെയ്യുന്നു (അത് ആക്ടിവേറ്റ് ചെയ്യാതെ). പഴയ സർവീസ് വർക്കർ പേജിനെ നിയന്ത്രിക്കുന്നത് തുടരുന്നു.
- പഴയ സർവീസ് വർക്കർ നിയന്ത്രിക്കുന്ന എല്ലാ ടാബുകളും അടയ്ക്കുന്നതുവരെ കാത്തിരിക്കുന്നു.
- പുതിയ സർവീസ് വർക്കർ ആക്ടിവേറ്റ് ചെയ്യുന്നു.
ഈ പ്രക്രിയ ഉപയോക്താവിൻ്റെ അനുഭവത്തെ തടസ്സപ്പെടുത്താതെ അപ്ഡേറ്റുകൾ സുഗമമായി പ്രയോഗിക്കുന്നുവെന്ന് ഉറപ്പാക്കുന്നു.
അപ്ഡേറ്റുകൾ നിർബന്ധിതമായി ചെയ്യുന്നു
ബ്രൗസർ യാന്ത്രികമായി അപ്ഡേറ്റുകൾ കൈകാര്യം ചെയ്യുമെങ്കിലും, ചില സാഹചര്യങ്ങളിൽ നിങ്ങൾ ഒരു അപ്ഡേറ്റ് നിർബന്ധിതമായി ചെയ്യാൻ ആഗ്രഹിച്ചേക്കാം. നിങ്ങളുടെ സർവീസ് വർക്കറിൽ നിർണായകമായ മാറ്റങ്ങൾ വരുത്തിയിട്ടുണ്ടെങ്കിലോ എല്ലാ ഉപയോക്താക്കളും ഏറ്റവും പുതിയ പതിപ്പ് ഉപയോഗിക്കുന്നുവെന്ന് ഉറപ്പാക്കണമെങ്കിലോ ഇത് ഉപയോഗപ്രദമാകും.
ഒരു അപ്ഡേറ്റ് നിർബന്ധിതമാക്കാനുള്ള ഒരു മാർഗ്ഗം നിങ്ങളുടെ സർവീസ് വർക്കറിൽ skipWaiting()
മെത്തേഡ് ഉപയോഗിക്കുക എന്നതാണ്. ഇത് പുതിയ സർവീസ് വർക്കറിനോട് കാത്തിരിപ്പ് ഘട്ടം ഒഴിവാക്കി ഉടൻ തന്നെ ആക്ടിവേറ്റ് ചെയ്യാൻ പറയുന്നു.
self.addEventListener('install', function(event) {
event.waitUntil(self.skipWaiting());
});
self.addEventListener('activate', function(event) {
event.waitUntil(self.clients.claim());
});
skipWaiting()
പഴയ സർവീസ് വർക്കർ നിയന്ത്രിക്കുന്ന ക്ലയിൻ്റുകൾ (വെബ് പേജുകൾ) നിലവിലുണ്ടെങ്കിൽ പോലും പുതിയ സർവീസ് വർക്കറിനെ ഉടൻ തന്നെ ആക്ടിവേറ്റ് ചെയ്യാൻ നിർബന്ധിക്കുന്നു. തുടർന്ന്, clients.claim()
ആ നിലവിലുള്ള ക്ലയിൻ്റുകളുടെ നിയന്ത്രണം ഏറ്റെടുക്കാൻ പുതിയ സർവീസ് വർക്കറിനെ അനുവദിക്കുന്നു.
ശ്രദ്ധിക്കുക: പഴയതും പുതിയതുമായ സർവീസ് വർക്കറുകൾ പൊരുത്തപ്പെടുന്നില്ലെങ്കിൽ skipWaiting()
, clients.claim()
എന്നിവ ഉപയോഗിക്കുന്നത് അപ്രതീക്ഷിത സ്വഭാവത്തിലേക്ക് നയിച്ചേക്കാം. സാധാരണയായി, ഈ മെത്തേഡുകൾ ആവശ്യമുള്ളപ്പോൾ മാത്രം ഉപയോഗിക്കാനും നിങ്ങളുടെ അപ്ഡേറ്റുകൾ മുൻകൂട്ടി നന്നായി പരീക്ഷിക്കാനും ശുപാർശ ചെയ്യുന്നു.
അപ്ഡേറ്റ് തന്ത്രങ്ങൾ
സർവീസ് വർക്കർ അപ്ഡേറ്റുകൾ കൈകാര്യം ചെയ്യുന്നതിനുള്ള ചില തന്ത്രങ്ങൾ താഴെ നൽകുന്നു:
- യാന്ത്രിക അപ്ഡേറ്റുകൾ: ബ്രൗസറിൻ്റെ യാന്ത്രിക അപ്ഡേറ്റ് സംവിധാനത്തെ ആശ്രയിക്കുക. ഇതാണ് ഏറ്റവും ലളിതമായ സമീപനം, മിക്ക ആപ്ലിക്കേഷനുകൾക്കും ഇത് നന്നായി പ്രവർത്തിക്കുന്നു.
- പതിപ്പുകളുള്ള കാഷെകൾ: ഉപയോക്താക്കൾക്ക് നിങ്ങളുടെ അസറ്റുകളുടെ ഏറ്റവും പുതിയ പതിപ്പ് ലഭിക്കുന്നുവെന്ന് ഉറപ്പാക്കാൻ കാഷെ പതിപ്പ് ചെയ്യൽ ഉപയോഗിക്കുക. നിങ്ങളുടെ ആപ്ലിക്കേഷൻ്റെ ഒരു പുതിയ പതിപ്പ് വിന്യസിക്കുമ്പോൾ, നിങ്ങളുടെ സർവീസ് വർക്കറിലെ കാഷെ പേര് അപ്ഡേറ്റ് ചെയ്യുക. ഇത് പുതിയ സർവീസ് വർക്കർ ഡൗൺലോഡ് ചെയ്യാനും ഇൻസ്റ്റാൾ ചെയ്യാനും ബ്രൗസറിനെ നിർബന്ധിക്കും.
- പശ്ചാത്തല അപ്ഡേറ്റുകൾ: പശ്ചാത്തലത്തിൽ കാഷെ അപ്ഡേറ്റ് ചെയ്യാൻ സ്റ്റെയിൽ-വൈൽ-റീവാലിഡേറ്റ് തന്ത്രം ഉപയോഗിക്കുക. കാഷെ എല്ലായ്പ്പോഴും കാലികമാണെന്ന് ഉറപ്പാക്കുമ്പോൾ തന്നെ ഇത് വേഗതയേറിയ പ്രാരംഭ പ്രതികരണം നൽകുന്നു.
- നിർബന്ധിത അപ്ഡേറ്റുകൾ (ശ്രദ്ധയോടെ): ഒരു അപ്ഡേറ്റ് നിർബന്ധിതമാക്കാൻ
skipWaiting()
,clients.claim()
എന്നിവ ഉപയോഗിക്കുക. ഈ തന്ത്രം മിതമായി ആവശ്യമുള്ളപ്പോൾ മാത്രം ഉപയോഗിക്കുക.
ഉദാഹരണം: ഗ്ലോബൽ ട്രാവൽ ബുക്കിംഗ് പ്ലാറ്റ്ഫോം
ഒന്നിലധികം ഭാഷകളെയും കറൻസികളെയും പിന്തുണയ്ക്കുന്ന ഒരു ഗ്ലോബൽ ട്രാവൽ ബുക്കിംഗ് പ്ലാറ്റ്ഫോമിന്, ഉപയോക്താക്കൾക്ക് എല്ലായ്പ്പോഴും ഏറ്റവും പുതിയ വിവരങ്ങളും ഫീച്ചറുകളും ലഭ്യമാണെന്ന് ഉറപ്പാക്കാൻ ശക്തമായ ഒരു അപ്ഡേറ്റ് തന്ത്രം ആവശ്യമാണ്. സാധ്യമായ സമീപനങ്ങൾ:
- ഉപയോക്താക്കൾക്ക് എല്ലായ്പ്പോഴും ഏറ്റവും പുതിയ വിവർത്തനങ്ങൾ, കറൻസി വിനിമയ നിരക്കുകൾ, ബുക്കിംഗ് സിസ്റ്റം അപ്ഡേറ്റുകൾ എന്നിവ ലഭിക്കുന്നുവെന്ന് ഉറപ്പാക്കാൻ പതിപ്പുകളുള്ള കാഷെകൾ പ്രയോജനപ്പെടുത്തുക.
- ഹോട്ടൽ വിവരണങ്ങൾ, യാത്രാ ഗൈഡുകൾ പോലുള്ള പ്രാധാന്യം കുറഞ്ഞ ഡാറ്റയ്ക്കായി പശ്ചാത്തല അപ്ഡേറ്റുകൾ (സ്റ്റെയിൽ-വൈൽ-റീവാലിഡേറ്റ്) ഉപയോഗിക്കുക.
- ഒരു പ്രധാന അപ്ഡേറ്റ് ലഭ്യമാകുമ്പോൾ ഉപയോക്താക്കളെ അറിയിക്കുന്നതിനുള്ള ഒരു സംവിധാനം നടപ്പിലാക്കുക, അവർ ഏറ്റവും പുതിയ പതിപ്പാണ് പ്രവർത്തിപ്പിക്കുന്നതെന്ന് ഉറപ്പാക്കാൻ പേജ് പുതുക്കാൻ അവരോട് ആവശ്യപ്പെടുക.
സർവീസ് വർക്കറുകൾ ഡീബഗ് ചെയ്യുന്നു
സർവീസ് വർക്കറുകൾ പശ്ചാത്തലത്തിൽ പ്രവർത്തിക്കുകയും കൺസോളിലേക്ക് പരിമിതമായ ആക്സസ്സ് ഉള്ളതുകൊണ്ടും അവയെ ഡീബഗ് ചെയ്യുന്നത് വെല്ലുവിളി നിറഞ്ഞതാണ്. എന്നിരുന്നാലും, ആധുനിക ബ്രൗസർ ഡെവലപ്പർ ടൂളുകൾ സർവീസ് വർക്കറുകളെ ഫലപ്രദമായി ഡീബഗ് ചെയ്യാൻ സഹായിക്കുന്ന നിരവധി സവിശേഷതകൾ നൽകുന്നു.
Chrome DevTools
സർവീസ് വർക്കറുകളെ പരിശോധിക്കുന്നതിനായി Chrome DevTools ഒരു പ്രത്യേക വിഭാഗം നൽകുന്നു. അത് ആക്സസ് ചെയ്യുന്നതിന്:
- Chrome DevTools തുറക്കുക (Ctrl+Shift+I അല്ലെങ്കിൽ Cmd+Opt+I).
- "Application" ടാബിലേക്ക് പോകുക.
- ഇടതുവശത്തുള്ള മെനുവിൽ നിന്ന് "Service Workers" തിരഞ്ഞെടുക്കുക.
സർവീസ് വർക്കേഴ്സ് വിഭാഗത്തിൽ, നിങ്ങൾക്ക് ഇവ ചെയ്യാനാകും:
- നിങ്ങളുടെ സർവീസ് വർക്കറിൻ്റെ നില കാണുക (പ്രവർത്തിക്കുന്നു, നിർത്തി, ഇൻസ്റ്റാൾ ചെയ്തു).
- സർവീസ് വർക്കർ അൺരജിസ്റ്റർ ചെയ്യുക.
- സർവീസ് വർക്കർ അപ്ഡേറ്റ് ചെയ്യുക.
- സർവീസ് വർക്കറിൻ്റെ കാഷെ സ്റ്റോറേജ് പരിശോധിക്കുക.
- സർവീസ് വർക്കറിൻ്റെ കൺസോൾ ലോഗുകൾ കാണുക.
- ബ്രേക്ക്പോയിൻ്റുകളും സ്റ്റെപ്പ്-ത്രൂ ഡീബഗ്ഗിംഗും ഉപയോഗിച്ച് സർവീസ് വർക്കർ ഡീബഗ് ചെയ്യുക.
Firefox Developer Tools
Firefox Developer Tools സർവീസ് വർക്കറുകളെ ഡീബഗ് ചെയ്യുന്നതിന് മികച്ച പിന്തുണ നൽകുന്നു. അത് ആക്സസ് ചെയ്യുന്നതിന്:
- Firefox Developer Tools തുറക്കുക (Ctrl+Shift+I അല്ലെങ്കിൽ Cmd+Opt+I).
- "Application" ടാബിലേക്ക് പോകുക.
- ഇടതുവശത്തുള്ള മെനുവിൽ നിന്ന് "Service Workers" തിരഞ്ഞെടുക്കുക.
Firefox Developer Tools, Chrome DevTools-ന് സമാനമായ ഫീച്ചറുകൾ വാഗ്ദാനം ചെയ്യുന്നു, സർവീസ് വർക്കറിൻ്റെ സ്റ്റാറ്റസ്, കാഷെ സ്റ്റോറേജ്, കൺസോൾ ലോഗുകൾ എന്നിവ പരിശോധിക്കാനും ബ്രേക്ക്പോയിൻ്റുകൾ ഉപയോഗിച്ച് സർവീസ് വർക്കർ ഡീബഗ് ചെയ്യാനുമുള്ള കഴിവ് ഉൾപ്പെടെ.
സർവീസ് വർക്കർ ഡെവലപ്മെൻ്റിനുള്ള മികച്ച രീതികൾ
സർവീസ് വർക്കറുകൾ ഡെവലപ്പ് ചെയ്യുമ്പോൾ പിന്തുടരേണ്ട ചില മികച്ച രീതികൾ താഴെ നൽകുന്നു:
- ലളിതമായി സൂക്ഷിക്കുക: സർവീസ് വർക്കറുകൾ ലളിതവും കാര്യക്ഷമവുമായിരിക്കണം. സങ്കീർണ്ണമായ ലോജിക്കും അനാവശ്യ ഡിപൻഡൻസികളും ഒഴിവാക്കുക.
- സമഗ്രമായി പരീക്ഷിക്കുക: ഓഫ്ലൈൻ മോഡ്, വേഗത കുറഞ്ഞ നെറ്റ്വർക്ക് കണക്ഷനുകൾ, വ്യത്യസ്ത ബ്രൗസർ പതിപ്പുകൾ എന്നിവയുൾപ്പെടെ വിവിധ സാഹചര്യങ്ങളിൽ നിങ്ങളുടെ സർവീസ് വർക്കർ പരീക്ഷിക്കുക.
- പിശകുകൾ ഭംഗിയായി കൈകാര്യം ചെയ്യുക: നിങ്ങളുടെ ആപ്ലിക്കേഷൻ തകരാറിലാകുകയോ അപ്രതീക്ഷിതമായി പെരുമാറുകയോ ചെയ്യുന്നത് തടയാൻ ശക്തമായ എറർ ഹാൻഡ്ലിംഗ് നടപ്പിലാക്കുക.
- പതിപ്പുകളുള്ള കാഷെകൾ ഉപയോഗിക്കുക: ഉപയോക്താക്കൾക്ക് നിങ്ങളുടെ അസറ്റുകളുടെ ഏറ്റവും പുതിയ പതിപ്പ് ലഭിക്കുന്നുവെന്ന് ഉറപ്പാക്കാൻ കാഷെ പതിപ്പ് ചെയ്യൽ ഉപയോഗിക്കുക.
- പ്രകടനം നിരീക്ഷിക്കുക: എന്തെങ്കിലും തടസ്സങ്ങൾ കണ്ടെത്താനും പരിഹരിക്കാനും നിങ്ങളുടെ സർവീസ് വർക്കറിൻ്റെ പ്രകടനം നിരീക്ഷിക്കുക.
- സുരക്ഷ പരിഗണിക്കുക: സർവീസ് വർക്കറുകൾക്ക് സെൻസിറ്റീവ് ഡാറ്റയിലേക്ക് ആക്സസ് ഉണ്ട്, അതിനാൽ കേടുപാടുകൾ തടയുന്നതിന് സുരക്ഷാ മികച്ച രീതികൾ പാലിക്കേണ്ടത് പ്രധാനമാണ്.
ഉപസംഹാരം
ശക്തവും ആകർഷകവുമായ വെബ് ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കുന്നതിന് സർവീസ് വർക്കർ ലൈഫ് സൈക്കിളിൽ വൈദഗ്ദ്ധ്യം നേടുന്നത് അത്യാവശ്യമാണ്. ഇൻസ്റ്റാളേഷൻ, ആക്ടിവേഷൻ, അപ്ഡേറ്റ് ഘട്ടങ്ങൾ മനസ്സിലാക്കുന്നതിലൂടെ, നിങ്ങൾക്ക് ഓഫ്ലൈൻ പ്രവർത്തനം, പുഷ് അറിയിപ്പുകൾ, മറ്റ് നൂതന ഫീച്ചറുകൾ എന്നിവ നൽകുന്ന സർവീസ് വർക്കറുകൾ സൃഷ്ടിക്കാൻ കഴിയും. നിങ്ങളുടെ സർവീസ് വർക്കറുകൾ ഫലപ്രദമായി പ്രവർത്തിക്കുന്നുവെന്ന് ഉറപ്പാക്കാൻ മികച്ച രീതികൾ പിന്തുടരാനും, സമഗ്രമായി പരീക്ഷിക്കാനും, പ്രകടനം നിരീക്ഷിക്കാനും ഓർമ്മിക്കുക.
വെബ് വികസിച്ചുകൊണ്ടിരിക്കുന്നതിനനുസരിച്ച്, അസാധാരണമായ ഉപയോക്തൃ അനുഭവങ്ങൾ നൽകുന്നതിൽ സർവീസ് വർക്കറുകൾക്ക് വർധിച്ച പങ്ക് വഹിക്കാനുണ്ടാകും. സർവീസ് വർക്കറുകളുടെ ശക്തിയെ സ്വീകരിക്കുകയും നിങ്ങളുടെ വെബ് ആപ്ലിക്കേഷനുകളുടെ പൂർണ്ണമായ കഴിവുകൾ പ്രയോജനപ്പെടുത്തുകയും ചെയ്യുക.