SERVICE WORKERS EN JAVASCRIPT: QUÉ SON Y CÓMO UTILIZARLOS
Un Service Worker en JavaScript es un script que el navegador ejecuta en segundo plano, separado de la página web principal, para realizar tareas como:- Gestión de caché: Almacena recursos (HTML, CSS, JS, imágenes, etc.) para habilitar aplicaciones web offline o mejorar la velocidad de carga (por ejemplo, en Progressive Web Apps).
- Interceptación de solicitudes de red: Actúa como un proxy entre la aplicación y la red, permitiendo modificar o almacenar en caché las respuestas a solicitudes HTTP.
- Notificaciones push: Maneja notificaciones push y acciones en segundo plano, incluso cuando la página no está abierta.
- Sincronización en segundo plano: Ejecuta tareas programadas, como sincronizar datos cuando la conexión a internet está disponible.
Características clave
- Ejecución en segundo plano: No está vinculado al DOM, por lo que no puede interactuar directamente con la interfaz de la página.
- Ciclo de vida: Se instala, activa y puede manejar eventos como fetch, push o sync.
- Seguridad: Solo funciona en contextos seguros (HTTPS) para evitar ataques de tipo "man-in-the-middle".
- Event-driven: Responde a eventos específicos, como solicitudes de red o mensajes desde la página.
Ejemplo básico
- Registrar un service worker:
//Código javascript
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/ServiceWorker.js')
.then(reg => console.log('Service Worker registrado', reg))
.catch(err => console.error('Error al registrar', err));
}
- Archivo ServiceWorker.js (Service Worker):
//Código javascript
self.addEventListener('install', event => {
console.log('Service Worker instalado');
// Cachear recursos
event.waitUntil(
caches.open('mi-cache').then(cache => {
return cache.addAll(['/index.html', '/styles.css']);
})
);
});
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request).then(response => {
return response || fetch(event.request);
})
);
});
En el ejemplo anterior, el Service Worker se instala, almacena en caché "index.html" y "styles.css", e intercepta solicitudes para devolver los recursos desde el caché si están disponibles.h2 style="color:#333; border-bottom:2px solid #0a5; padding-bottom:8px; margin:40px 0 20px;">Limitaciones
- No accede al DOM ni a ciertas APIs del navegador como "window".
- Su uso está restringido a navegadores modernos que lo soporten.
- Requiere HTTPS (excepto en localhost para desarrollo).
Los Service Worker son una herramienta poderosa para mejorar la experiencia de usuario en aplicaciones web modernas, especialmente en entornos con conexiones inestables.
- Registrar un service worker:
//Código javascript if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/ServiceWorker.js') .then(reg => console.log('Service Worker registrado', reg)) .catch(err => console.error('Error al registrar', err)); } - Archivo ServiceWorker.js (Service Worker):
//Código javascript self.addEventListener('install', event => { console.log('Service Worker instalado'); // Cachear recursos event.waitUntil( caches.open('mi-cache').then(cache => { return cache.addAll(['/index.html', '/styles.css']); }) ); }); self.addEventListener('fetch', event => { event.respondWith( caches.match(event.request).then(response => { return response || fetch(event.request); }) ); });
En el ejemplo anterior, el Service Worker se instala, almacena en caché "index.html" y "styles.css", e intercepta solicitudes para devolver los recursos desde el caché si están disponibles.h2 style="color:#333; border-bottom:2px solid #0a5; padding-bottom:8px; margin:40px 0 20px;">Limitaciones
- No accede al DOM ni a ciertas APIs del navegador como "window".
- Su uso está restringido a navegadores modernos que lo soporten.
- Requiere HTTPS (excepto en localhost para desarrollo).