这是Happy Little Monoliths(第 6 章)的摘录,包含 Fastify 示例的源代码这里。
- Cap’n Proto 介绍:是 Kenton Varda 开发的精简快速数据交换格式,现广泛用于 Cloudflare,其需预编译模式才能工作,理论上解析时间更快,因为无需解析,数据按需提取。
简单示例:
- 生成 Cap’n Proto 模式:使用
cat basic.json | npx capnp-schema-gen Basic > basic.capnp从 JSON 文件生成模式。 - 编译模式类:通过
npx capnp-es -ojs basic.capnp编译模式类。 - 示例代码在
examples/6/basic-capnp。
- 生成 Cap’n Proto 模式:使用
发送 Cap’n Proto 数据:
- 创建简单 UI 按钮,通过
fetch发送数据到服务器,使用toArrayBuffer()或toPackedArrayBuffer()将数据转换为缓冲区。
- 创建简单 UI 按钮,通过
- 接收 Cap’n Proto 数据:添加
/encode端点,使用Basic模式类解码消息,不确定官方 MIME 类型,可使用application/x-capnp或application/octet-stream,示例在examples/6/fastify-capnp。 性能测试:
- 生成 46kb 的 JSON 文件
news.json,并转换为 Cap’n Proto 模式和消息。 - 创建服务器测试解码 JSON 和 Cap’n Proto 消息的性能,对于仅访问
date字段,Cap’n Proto 比 JSON 快 100%以上,但访问所有字段时,JSON 性能更好,原因是 Cap’n Proto 每次访问字段都需调用特定函数。 - 对于处理大型数据负载,Cap’n Proto 在延迟处理方面有优势,仅在减少负载大小方面有益,还可用于超大负载或部分访问数据的情况,其他情况使用 JSON 和
application/x-www-form-urlencoded。
- 生成 46kb 的 JSON 文件
注意事项:
- 属性名不能有下划线。
Text字段限制为 512mb。capnp-es仍处于 alpha 阶段,但测试中较稳定。特别感谢[Matteo Collina]帮忙调查。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。