Apache Fory 团队很高兴宣布 0.17.0 版本正式发布。这是一个重要版本,包含来自 19 位贡献者的 71 个 PR。请访问 Install 页面 获取各平台安装方式。
JavaScript/NodeJS Serialization:首次发布
Apache Fory 0.17.0 首次正式提供 JavaScript/NodeJS 文档、基准测试覆盖,以及对 TypeScript 友好的 IDL 代码生成支持。JavaScript 运行时面向现代 Node.js 服务和 TypeScript 代码库构建,同时保留了 Fory 的跨语言对象模型、Schema 驱动 API,以及可选的引用跟踪能力。
关键能力:
- 面向 Node.js 中 JavaScript 和 TypeScript 对象的高性能序列化
- 支持与 Java、Python、Go、Rust、C#、Swift 和 Dart 的跨语言兼容
- 通过
Type.*builder 与 TypeScript decorator 提供 Schema 驱动 API - 可选的引用跟踪,用于处理共享引用和循环引用对象图
- 用于 Schema 演进的兼容模式
- 可配置的深度、二进制大小和集合大小护栏
- 在 Fory IDL/compiler 工作流中支持 JavaScript/TypeScript target
- 为 Node.js 20+ 提供可选的
@apache-fory/hps快速字符串路径
快速开始
import Fory, { Type } from "@apache-fory/core";
const userType = Type.struct(
{ typeName: "example.user" },
{
id: Type.int64(),
name: Type.string(),
age: Type.int32(),
},
);
const fory = new Fory();
const { serialize, deserialize } = fory.register(userType);
const bytes = serialize({
id: 1n,
name: "Alice",
age: 30,
});
const user = deserialize(bytes);
console.log(user);
- JavaScript 指南: https://fory.apache.org/docs/guide/javascript/
- Compiler 文档: https://fory.apache.org/docs/compiler/
JavaScript 基准测试
以下是代表性数据结构上的吞吐结果(ops/sec,越高越好),用于比较 Fory、Protocol Buffers 与 JSON。
| Datatype | Operation | Fory TPS | Protobuf TPS | JSON TPS | Fastest |
|---|---|---|---|---|---|
| Struct | Serialize | 8,453,950 | 1,903,706 | 3,058,232 | fory |
| Struct | Deserialize | 9,705,287 | 8,233,664 | 3,860,538 | fory |
| Sample | Serialize | 1,498,391 | 422,620 | 744,790 | fory |
| Sample | Deserialize | 1,918,162 | 819,010 | 762,048 | fory |
| MediaContent | Serialize | 1,293,157 | 729,497 | 1,299,908 | json |
| MediaContent | Deserialize | 1,638,086 | 1,209,140 | 921,191 | fory |
| StructList | Serialize | 3,928,325 | 495,648 | 891,810 | fory |
| StructList | Deserialize | 3,264,827 | 1,529,744 | 986,144 | fory |
| SampleList | Serialize | 355,581 | 92,741 | 163,120 | fory |
| SampleList | Deserialize | 424,916 | 163,253 | 162,520 | fory |
| MediaContentList | Serialize | 286,053 | 148,977 | 282,445 | fory |
| MediaContentList | Deserialize | 376,826 | 244,622 | 190,155 | fory |
序列化数据大小(bytes):
| Datatype | Fory | Protobuf | JSON |
|---|---|---|---|
| Struct | 58 | 61 | 103 |
| Sample | 446 | 377 | 724 |
| MediaContent | 391 | 307 | 596 |
| StructList | 184 | 315 | 537 |
| SampleList | 1980 | 1900 | 3642 |
| MediaContentList | 1665 | 1550 | 3009 |
详细基准数据请参见: https://github.com/apache/fory/tree/v0.17.0/benchmarks/javascript
Dart Serialization:首次发布
Apache Fory 0.17.0 也正式带来了 Dart serialization 的首次发布,提供官方文档、基准测试覆盖、重构后的运行时,以及 Dart IDL 支持。Dart 实现重点关注生成式 serializer、稳定的跨语言类型标识、Schema 演进,以及面向服务工作负载的可预测 API。
关键能力:
- 使用生成代码而非反射实现高性能 Dart serialization
