Transportes
Tabus no habla directamente con el navegador: delega el envío y la recepción de mensajes en un transporte que implementa ITransport. Hay dos implementaciones incluidas, y Tabus elige una automáticamente al construirse.
Elección automática
Sección titulada «Elección automática»typeof BroadcastChannel !== "undefined" ? new BroadcastTransport(channelName) : new MemoryTransport(channelName);No necesitas elegir el transporte a mano: Tabus comprueba si BroadcastChannel existe en el entorno actual y decide por ti.
BroadcastTransport
Sección titulada «BroadcastTransport»Es un envoltorio delgado sobre la API nativa BroadcastChannel:
Método de ITransport |
Se traduce a |
|---|---|
send(msg) |
bc.postMessage(msg) |
onMessage(listener) |
bc.addEventListener("message", ...) |
destroy() |
bc.close() |
Funciona entre pestañas, ventanas y workers reales del mismo origen. Es el transporte que se usa en cualquier navegador moderno.
MemoryTransport, el fallback
Sección titulada «MemoryTransport, el fallback»Se activa cuando BroadcastChannel no existe: Node, entornos de SSR, o navegadores muy antiguos sin soporte.
- Mantiene un registro a nivel de módulo: un
Map<string, Set<listener>>compartido por todas las instancias deMemoryTransportdentro del mismo proceso. - A diferencia de
BroadcastTransport, el propio listener del emisor sí es invocado porsend()— esTabus, no el transporte, quien filtra portabIdpara no reenviarle a la pestaña su propio evento. - Emite un único
console.warnpor nombre de canal, avisando que se activó el fallback. - Expone
__resetMemoryBus(), pensado exclusivamente para limpiar estado entre tests.
¿Cuándo debería preocuparme por esto?
Sección titulada «¿Cuándo debería preocuparme por esto?»En la práctica, casi nunca tienes que pensar en qué transporte se está usando: la API pública de Tabus (on, off, emit, destroy) es idéntica en ambos casos. Vale la pena tenerlo en cuenta en dos escenarios:
- SSR: tabus-js no lanza errores al importarse o instanciarse en el servidor, porque cae al fallback en memoria en vez de intentar usar
BroadcastChannel. - Tests: si corres tests en Node (como hace la propia librería, con Vitest), es normal ver el
console.warndel fallback salvo que fuerces o mockeesBroadcastChannel.
Siguiente paso
Sección titulada «Siguiente paso»Consulta la referencia de la API de transportes para ver la forma exacta de ITransport, BroadcastTransport y MemoryTransport.
