结构化克隆
Electron 的 IPC 和 contextBridge 传递数据时使用结构化克隆算法,和浏览器 postMessage 同一类规则。
可以传递的值包括:
- 字符串、数字、布尔、
null、undefined、bigint - 普通对象和数组
Date、RegExp、Map、SetArrayBuffer、类型化数组Error(跨边界时往往只保留消息等有限字段)
不能传递的值包括函数、DOM 节点、Symbol 作为数据时的一部分,以及 Electron 内部的绑定对象(例如直接把 ipcRenderer 当对象送过桥)。
类的实例在克隆后只剩下可复制的数据字段,方法不会跟着过去。跨进程的接口使用纯数据对象。
ArrayBuffer 可以放进转交列表(transfer),所有权移到对面,发送侧的缓冲区随之失效,从而避免再复制一份大内存。
contextBridge 对非函数值还会冻结复制后的结果。函数不是被克隆,而是被代理:页面调用时,函数仍在预加载脚本一侧执行。