| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/es/docs/Web/API/Service_Worker_API | [Back] [Original] |
Get to know MDN better
Esta pgina ha sido traducida del ingls por la comunidad. Aprende ms y nete a la comunidad de MDN Web Docs.
Nota: Esta caracterstica est disponible en Web Workers.
Los service workers actan esencialmente como servidores proxy que se sitan entre las aplicaciones web, el navegador y la red (cuando est disponible). Estn destinados, entre otras cosas, a permitir la creacin de experiencias offline efectivas, interceptar peticiones de red y realizar la accin apropiada segn si la red est disponible y si hay contenidos actualizados en el servidor. Tambin permiten el acceso a notificaciones push y APIs de sincronizacin en segundo plano.
Nota: Los service workers son un tipo de web worker. Consulte Web workers para informacin general sobre los tipos de workers y casos de uso.
Un service worker es un worker controlado por eventos, registrado para un origen y una ruta. Consiste en un archivo JavaScript que puede controlar la pgina web o sitio con el que est asociado, interceptando y modificando las peticiones de navegacin y recursos, y almacenando en cach los recursos de manera muy granular para ofrecer un control completo sobre cmo se comporta la aplicacin en ciertas situaciones (la ms obvia es cuando la red no est disponible).
Los service workers se ejecutan en un contexto worker: por lo tanto, no tienen acceso al DOM y se ejecutan en un hilo distinto al JavaScript principal que alimenta la aplicacin. Son no bloqueantes y estn diseados para ser completamente asncronos. Como consecuencia, APIs como XHR sncrono y Web Storage no se pueden usar dentro de un service worker.
Los service workers no pueden importar mdulos JavaScript dinmicamente, y import() lanzar un error si se invoca en el mbito global de un service worker. Las importaciones estticas usando la sentencia import s estn permitidas.
Los service workers solo estn disponibles en contextos seguros: esto significa que su documento se sirve sobre HTTPS, aunque los navegadores tambin tratan http://localhost como un contexto seguro para facilitar el desarrollo local. Las conexiones HTTP son susceptibles a inyeccin de cdigo malicioso mediante ataques de intermediario, y tales ataques podran ser peores si se permitiera acceso a estas potentes APIs.
Nota: En Firefox, para realizar pruebas se pueden ejecutar service workers sobre HTTP (de forma insegura); simplemente marque la opcin Habilitar Service Workers sobre HTTP (cuando la caja de herramientas est abierta) en el men de opciones/engranaje de las herramientas de desarrollo de Firefox.
Nota: A diferencia de intentos anteriores en esta rea como AppCache, los service workers no hacen suposiciones sobre lo que se intenta hacer para luego fallar cuando esas suposiciones no son exactamente correctas. En su lugar, los service workers ofrecen un control mucho ms granular.
Nota: Los service workers hacen un uso intensivo de las promesas, ya que generalmente esperarn a que lleguen las respuestas y luego respondern con una accin de xito o fracaso. La arquitectura de promesas es ideal para esto.
Un service worker se registra primero mediante el mtodo ServiceWorkerContainer.register(). Si tiene xito, el service worker se descargar en el cliente e intentar la instalacin/activacin (ver ms abajo) para las URLs accedidas por el usuario dentro de todo el origen, o un subconjunto especificado.
En este punto, el service worker seguir el siguiente ciclo de vida:
El service worker se descarga inmediatamente cuando un usuario accede por primera vez a un sitio/pgina controlados por un service worker.
Despus de eso, se actualiza cuando:
La instalacin se intenta cuando el archivo descargado resulta ser nuevo, ya sea diferente a un service worker existente (comparado byte a byte), o el primer service worker encontrado para esta pgina/sitio.
Si es la primera vez que un service worker est disponible, se intenta la instalacin; tras una instalacin exitosa, se activa.
Si ya hay un service worker existente disponible, la nueva versin se instala en segundo plano, pero an no se activa; en ese momento se le llama worker en espera. Solo se activa cuando ya no hay pginas cargadas que an usen el service worker antiguo. En cuanto no quedan ms pginas por cargar, el nuevo service worker se activa (convirtindose en el worker activo). La activacin puede ocurrir antes usando ServiceWorkerGlobalScope.skipWaiting() y las pginas existentes pueden ser reclamadas por el worker activo usando Clients.claim().
Se puede escuchar el evento install; una accin estndar es preparar el service worker para su uso cuando se dispara, por ejemplo creando una cach usando la API de almacenamiento incorporada, y colocando dentro los recursos que se necesitarn para ejecutar la aplicacin sin conexin.
Tambin existe un evento activate. El momento en que se dispara este evento es generalmente un buen momento para limpiar cachs antiguas y otras cosas asociadas con la versin anterior del service worker.
El service worker puede responder a peticiones usando el evento FetchEvent. Se puede modificar la respuesta a estas peticiones de cualquier manera deseada, usando el mtodo FetchEvent.respondWith().
Nota:
Dado que los eventos install/activate pueden tardar un tiempo en completarse, la especificacin de service workers proporciona un mtodo waitUntil(). Una vez invocado en eventos install o activate con una promesa, los eventos funcionales como fetch y push esperarn hasta que la promesa se resuelva exitosamente.
Para un tutorial completo que muestra cmo construir un primer ejemplo bsico, lea Uso de Service Workers.
Los service workers pueden incurrir en un costo de rendimiento innecesario: cuando una pgina se carga por primera vez despus de un tiempo, el navegador tiene que esperar a que el service worker se inicie y ejecute para saber qu contenido cargar y si debe provenir de una cach o de la red.
Si ya se sabe de antemano de dnde deben obtenerse ciertos contenidos, se puede omitir el service worker por completo y obtener los recursos de forma inmediata. El mtodo InstallEvent.addRoutes() se puede usar para implementar este caso de uso y ms.
Los service workers tambin estn pensados para usarse en cosas como:
En el futuro, los service workers podrn hacer varias cosas tiles para la plataforma web que la acercarn a la viabilidad de aplicaciones nativas. Resulta interesante que otras especificaciones pueden y van a empezar a hacer uso del contexto de service workers, por ejemplo:
CacheRepresenta el almacenamiento para pares de objetos Request / Response que se almacenan en cach como parte del ciclo de vida del ServiceWorker.
CacheStorageRepresenta el almacenamiento para objetos Cache. Proporciona un directorio maestro de todas las cachs nombradas a las que puede acceder un ServiceWorker, y mantiene una correspondencia de nombres de cadena a los objetos Cache correspondientes.
ClientRepresenta el mbito de un cliente de service worker. Un cliente de service worker es un documento en un contexto de navegador o un SharedWorker, controlado por un worker activo.
ClientsRepresenta un contenedor para una lista de objetos Client; la va principal para acceder a los clientes de service worker activos en el origen actual.
ExtendableEventExtiende el tiempo de vida de los eventos install y activate despachados en el ServiceWorkerGlobalScope, como parte del ciclo de vida del service worker. Esto asegura que los eventos funcionales (como FetchEvent) no se despachan al ServiceWorker hasta que actualiza los esquemas de base de datos, elimina entradas de cach obsoletas, etc.
ExtendableMessageEventEl objeto de evento de un evento message disparado en un service worker (cuando se recibe un mensaje de canal en el ServiceWorkerGlobalScope desde otro contexto), extiende el tiempo de vida de tales eventos.
FetchEventEl parmetro pasado al controlador onfetch, FetchEvent representa una accin de fetch despachada en el ServiceWorkerGlobalScope de un ServiceWorker. Contiene informacin sobre la peticin y la respuesta resultante, y proporciona el mtodo FetchEvent.respondWith(), que permite proporcionar una respuesta arbitraria a la pgina controlada.
InstallEventEl parmetro pasado a la funcin controladora de un evento install, la interfaz InstallEvent representa una accin de instalacin despachada en el ServiceWorkerGlobalScope de un ServiceWorker. Como hijo de ExtendableEvent, asegura que los eventos funcionales como FetchEvent no se despachan durante la instalacin.
NavigationPreloadManagerProporciona mtodos para gestionar la precarga de recursos con un service worker.
ServiceWorkerRepresenta un service worker. Mltiples contextos de navegacin (por ejemplo, pginas, workers, etc.) pueden estar asociados con el mismo objeto ServiceWorker.
ServiceWorkerContainerProporciona un objeto que representa el service worker como una unidad global en el ecosistema de red, incluyendo servicios para registrar, dar de baja y actualizar service workers, y acceder al estado de los service workers y sus registros.
ServiceWorkerGlobalScopeRepresenta el contexto de ejecucin global de un service worker.
ServiceWorkerRegistrationRepresenta un registro de service worker.
WindowClientRepresenta el mbito de un cliente de service worker que es un documento en un contexto de navegador, controlado por un worker activo. Es un tipo especial de objeto Client, con algunos mtodos y propiedades adicionales disponibles.
Window.caches y WorkerGlobalScope.cachesDevuelve el objeto CacheStorage asociado al contexto actual.
Navigator.serviceWorker y WorkerNavigator.serviceWorkerDevuelve un objeto ServiceWorkerContainer, que proporciona acceso al registro, eliminacin, actualizacin y comunicacin con los objetos ServiceWorker para el documento asociado.
| Specification |
|---|
| Service Workers Nightly |
This page was last modified on 15 abr 2026 by MDN contributors.
Your blueprint for a better internet.
Portions of this content are 19982026 by individual mozilla.org contributors. Content available under a Creative Commons license.
| Web Proxy Viewer | New URL | Original Page |