Перейти к основному содержимому

In-Memory Transport

Что это за режим

Ссылка на заголовок

In-memory transport означает, что host и remote выполняются в одном JavaScript runtime. Вместо iframe/worker транспорта remote получает channel host напрямую:

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

Именно такой wiring используется в интеграционных тестах.

Когда использовать

Ссылка на заголовок

Этот режим подходит для:

  • локальных dev-runtime оболочек;
  • integration/unit тестовых стендов;
  • быстрой диагностики поведения render synchronization.

Не для production-изоляции

Ссылка на заголовок

In-memory transport не рекомендуется для production-изоляции расширений.

Почему:

  • нет sandbox boundary;
  • нет изоляции по процессам/потокам;
  • хуже проявляются реальные особенности транспорта (latency, сериализация, ordering при async-связи);
  • выше blast radius при проблемном remote-коде.

Используйте этот режим как dev/test топологию, но не как security boundary.

Минимальный пример подключения

Ссылка на заголовок
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 (тот же runtime)
createApp(defineComponent({
setup() {
return () => h(HostedTree, { provider, receiver })
},
})).mount('#host')
// Remote app (тот же 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()

Практические замечания

Ссылка на заголовок
  1. Держите transport-специфичные тесты отдельно для worker/iframe/network режимов.
  2. Не проверяйте security-ожидания только на in-memory режиме.
  3. Используйте этот режим для быстрой итерации и обязательно перепроверяйте на production-транспорте.

Связанные разделы

Ссылка на заголовок