Transporte en memoria
Qué es este modo
Enlace al encabezadoEl transporte en memoria significa que host y remoto se ejecutan en el mismo runtime de JavaScript.
En lugar de usar transporte iframe/worker, el remoto recibe directamente el canal del host:
const receiver = createReceiver()const root = createRemoteRoot(receiver.receive)Este es el mismo modelo de cableado que se usa en las pruebas de integración.
Uso previsto
Enlace al encabezadoUsa este modo para:
- shells locales de runtime para desarrollo;
- bancos de pruebas de integración/unitarias;
- diagnósticos rápidos del comportamiento de sincronización de render.
No sirve como aislamiento de producción
Enlace al encabezadoEl transporte en memoria no se recomienda para aislamiento de extensiones en producción.
Motivos:
- no hay frontera de sandbox;
- no hay aislamiento por proceso o hilo;
- ofrece menos señales sobre el comportamiento real del transporte, como latencia, serialización u orden bajo enlaces asíncronos;
- el radio de impacto es mayor si el código remoto se comporta mal.
Trátalo como una topología de desarrollo y pruebas, no como una frontera de seguridad.
Ejemplo mínimo de cableado
Enlace al encabezadoimport { createApp, defineComponent, h } from 'vue'import { createReceiver } from '@omnicajs/vue-remote/host'import { HostedTree, createProvider } from '@omnicajs/vue-remote/host'import { createRemoteRoot, createRemoteRenderer, defineRemoteComponent } from '@omnicajs/vue-remote/remote'
import VSignalBadge from './components/VSignalBadge.vue'
const provider = createProvider({ VSignalBadge })const receiver = createReceiver()
// Host app (same runtime)createApp(defineComponent({ setup() { return () => h(HostedTree, { provider, receiver }) },})).mount('#host')
// Remote app (same runtime)const root = createRemoteRoot(receiver.receive, { components: ['VSignalBadge'],})
const VRemoteSignal = defineRemoteComponent<'VSignalBadge', { tone: 'neutral' | 'success' | 'warning'; label: string;}>('VSignalBadge')
const remote = createRemoteRenderer(root).createApp(defineComponent({ setup() { return () => h(VRemoteSignal, { tone: 'success', label: 'In-memory transport is active', }) },}))
remote.mount(root)await root.mount()await receiver.flush()Consideraciones prácticas
Enlace al encabezado- Mantén pruebas específicas del transporte por separado para modos worker/iframe/red.
- No uses el modo en memoria para validar supuestos de seguridad.
- Úsalo para iterar rápido y después verifica en tu transporte de producción.