Saltar al contenido principal

Transporte en memoria

Qué es este modo

Enlace al encabezado

El 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.

Usa 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 encabezado

El 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 encabezado
import { 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
  1. Mantén pruebas específicas del transporte por separado para modos worker/iframe/red.
  2. No uses el modo en memoria para validar supuestos de seguridad.
  3. Úsalo para iterar rápido y después verifica en tu transporte de producción.

Documentación relacionada

Enlace al encabezado