我创建了一个名为 Bytery 的 JSON 编解码器,它在存储和传输方面的速度大约快 10 倍,体积也小 10 倍。
这不仅仅是一个实现;它是一个可以用任何语言实现的完整协议。
性能和体积的主要提升来自于高度紧凑的二进制数据格式:将数字压缩为更少的字节,避免重复的字符串和模式,并应用其他低级优化。
以下是我实现的一些优化示例:
编码整数:
- JSON 将整数(以及其他所有内容)表示为文本标记,依赖于解析器、数字解码(如 char - 48)和分隔符。
- Bytery 将整数表示为 LUINT:如果值在 0 到 246 之间,则使用一个字节。值 247 到 254 表示接下来的 1 到 8 个字节应构建一个大端整数,255 则表示空值。
编码字符串:
- JSON 使用分隔符、转义字符和一对引号来表示字符串,扫描直到闭合引号的过程需要消耗 CPU,同时还要处理转义序列。
- Bytery 将字符串表示为一对 [长度:LUINT, 数据]。它将长度读取为 LUINT,然后正好读取该数量的字节。快速,无需解析,无需分隔符,无需扫描引号,无需处理转义。
* 这些只是一些示例。还有很多其他优化,比如字符串缓存表、模式缓存、字段类型等。
* 完整的规格文档大约有 4000 行,所有内容都经过仔细编写。
该协议是完全无损的,可以处理任何独立的 JSON 对象,而无需事先了解模式或数据结构。
Bytery 还可以以原生二进制格式传输文件,无需将其转换为 Base64,从而避免约 30% 的大小开销。
Bytery 还可以与 GZIP 和其他后处理工具结合使用,使有效载荷更小。
我在这里关注的是协议和传输格式本身。
该项目是免费的。我的目标是让互联网摆脱解析、存储和传输 JSON 所带来的高开销,同时允许客户端以高速解码数据。
返回首页
最新
信息清晰可见,但无法截图。(或者只需点击/轻触暂停效果。)<p>我认为这个电视静态效果比网上其他效果更真实:<p>- 宽CRT“像素”长宽比<p>- 较大的“颗粒”(以匹配低CRT分辨率)<p>- CRT“扫描线”(按‘C’键切换)<p>多年前我尝试过这个效果,当时没有GPU着色器似乎是不可能的。随着硬件/JS性能的进步,CPU可以轻松以1000帧每秒的速度输出更高分辨率(2560x1440)。 (按ENTER键进入全屏模式)<p>---<p>使用URL参数自定义消息:<a href="https://fx.leftium.com/static?text=HN" rel="nofollow">https://fx.leftium.com/static?text=HN</a><p>(要查看所有选项:按‘U’键将URL复制到剪贴板,并输出到开发控制台。)<p>使用SvelteKit制作:<a href="https://github.com/Leftium/fx" rel="nofollow">https://github.com/Leftium/fx</a>
Pretzel是一个关于音乐的实时AI代理实验。它是一个网络同步的音乐音序器,由AI代理控制。每个人都与同一个AI代理聊天,并在任何时候听到相同的音乐。我不是音频工程师,所以这首曲子相当简单,结果发现音频是一个相当复杂的三维函数。
我昨天参加了谷歌的IO黑客马拉松,完全不知道自己要做什么。我想到了构建一个实时DJ代理,让人们可以表达他们的感受,代理会实时更新音乐。这大约实现了我设想的一半。
我一直在构建一个名为[Talon](https://github.com/impalasys/talon)的Rust代理框架,易于在微型虚拟机上自我托管(大约100MB内存)。Pretzel将每个人连接到同一个在Talon托管的DJ代理会话。
我很好奇大家的想法。