这是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) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。