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 entorno de JavaScript. En lugar de usar iframe o worker, el remoto recibe directamente el canal del host:

const receiver = createReceiver()
const root = createRemoteRoot(receiver.receive)

Es el mismo patrón de conexión que normalmente se usa en pruebas de integración.

Cuándo usarlo

Enlace al encabezado

Este modo sirve bien para:

  • entornos locales de desarrollo;
  • pruebas de integración o unitarias;
  • diagnósticos rápidos del comportamiento de sincronización del render.

No sustituye el aislamiento de producción

Enlace al encabezado

El transporte en memoria no se recomienda como aislamiento para extensiones en producción.

Motivos:

  • no existe una frontera real de sandbox;
  • no hay aislamiento por proceso ni por hilo;
  • ofrece menos señales sobre el comportamiento real del transporte, por ejemplo latencia, serialización y orden bajo enlaces asíncronos;
  • si el código remoto se comporta mal, el impacto alcanza a todo el entorno.

Trátalo como una topología de desarrollo y pruebas, no como una frontera de seguridad.

Ejemplo mínimo de conexión

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 separadas las pruebas específicas de transporte para modos con worker, iframe o red.
  2. No uses este modo para validar supuestos de seguridad.
  3. Úsalo para iterar rápido y después valida el comportamiento en el transporte real de producción.

Documentación relacionada

Enlace al encabezado