跳到主要内容
版本:dev

配置

Fory JavaScript 是仅支持 xlang 的实现。new Fory() 写入 xlang 载荷,并默认使用兼容 Schema 演进。JavaScript API 中不存在原生模式开关。

基本配置

import Fory from "@apache-fory/core";

const fory = new Fory();

为每个应用区域创建并复用一个 Fory 实例。注册会为每个 Schema 生成并缓存序列化器代码。

构造函数选项

import Fory from "@apache-fory/core";
import hps from "@apache-fory/hps";

const fory = new Fory({
ref: true,
compatible: true,
maxDepth: 100,
maxGraphMemoryBytes: 128 * 1024 * 1024,
maxUnbackedContainerItems: 8192,
maxTypeFields: 512,
maxTypeMetaBytes: 4096,
maxSchemaVersionsPerType: 10,
maxAverageSchemaVersionsPerType: 3,
hps,
});
选项默认值说明
reffalse为共享引用或循环对象图启用引用跟踪
compatibletrue允许新增或删除字段而不破坏现有消息
maxDepth50最大嵌套深度。必须为 >= 2。深层嵌套结构可提高此值
maxGraphMemoryBytes128 MiB单次根值反序列化允许的近似对象图内存限制
maxUnbackedContainerItems8192单次根值反序列化允许的无输入支撑集合元素和 map 条目数
maxTypeFields512单个已接收远程 struct 元数据主体允许的最大字段数
maxTypeMetaBytes4096单个已接收 TypeMeta 主体允许的最大编码主体字节数
maxSchemaVersionsPerType10单个逻辑类型允许的最大远程元数据版本数
maxAverageSchemaVersionsPerType3所有已接受远程类型允许的平均远程元数据版本数
useSliceStringfalse可选的 Node.js 字符串读取优化。除非已经基准测试,否则保留默认值
hps未设置来自 @apache-fory/hps 的可选快速字符串辅助模块(Node.js 20+)
hooks.afterCodeGenerated未设置检查生成的序列化器代码的回调,适用于调试

引用跟踪

必须先启用全局引用跟踪,字段级引用元数据才能生效:

const fory = new Fory({ ref: true });

然后在 Schema 中标记启用引用跟踪的字段,例如使用 Type.struct("example.node").setTrackingRef(true)。参见引用Schema 元数据

兼容 Schema 演进

默认使用兼容模式。要获得更快序列化和更小体积:

const fory = new Fory({ compatible: false });

滚动升级、独立部署服务和跨语言载荷应使用兼容模式。仅当每个读取端和写入端始终使用相同 struct Schema,并且希望获得更快序列化和更小体积时,才使用 compatible: false。对于单个 struct,evolving: false 会对该 struct 应用相同的退出设置。对于跨语言载荷,只有确认每种语言使用相同 Schema,或原生类型由 Fory Schema IDL 生成时,才设置 compatible: false。参见 Schema 演进

对象图内存预算

maxGraphMemoryBytes 设置单次根值反序列化的近似对象图内存限制。该估算主要覆盖物化的 array、set、map、struct 和 object。它会跳过 string、binary data、primitive scalar 和 dense primitive array 等叶子值,因此实际 JavaScript 堆使用量可能高于此值。叶子值仍受可用字节检查保护:如果未读输入不包含足够字节,Fory 不会读取或创建该叶子值。默认值固定为 128 MiB,不会根据输入大小推导。

使用正字节数显式设置更低或更高的限制:

const fory = new Fory({
maxGraphMemoryBytes: 32 * 1024 * 1024,
});

创建运行时时会拒绝显式的非正值。

String、binary 和专用 dense primitive array 载荷保留普通字节大小检查,不消费此对象图预算。仅对确实包含非常紧凑对象图的可信工作负载提高限制。

无输入支撑容器工作预算

maxUnbackedContainerItems 限制一次根值反序列化中,重复读取主体不按比例消费输入的集合元素和 map 条目。默认值为 8192;零表示严格限制。仅对有意使用紧凑零字节 codec 的可信载荷提高此值。

可选 HPS 字符串路径

@apache-fory/hps 提供可选的 Node.js 字符串快速路径:

import hps from "@apache-fory/hps";

const fory = new Fory({ hps });

除非运行在 Node.js 20+ 上且已经对工作负载进行基准测试,否则不要设置此项。

安全

有关信任边界、安全的读取端配置和验证方法,请参阅 JavaScript/TypeScript 安全

相关主题