Javascript JSON响应对象:";“漂亮”;键和较大的响应还是短键和较小的响应?

Javascript JSON响应对象:";“漂亮”;键和较大的响应还是短键和较小的响应?,javascript,json,Javascript,Json,我的实时web应用程序发出ajax请求以获取JSON秒数据响应 返回的数据通常是对象数组的形式 由于数组通常有很多元素(尽管服务器对发送的数据进行了gzip处理),为了将响应大小保持在最小值,我将响应中的键保持得非常短 例如,不使用说明:我使用d:,而使用宽度:我使用w:等等 这样做可以减小响应的大小,但在客户端,非常短的非人类readabe键会降低JavaScript代码(访问对象)的可读性 唯一的解决方案似乎是重新分析响应,用漂亮的键重建对象,或者在收到的原始对象中替换它们。但是这可能会损害

我的实时web应用程序发出ajax请求以获取JSON秒数据响应

返回的数据通常是对象数组的形式

由于数组通常有很多元素(尽管服务器对发送的数据进行了gzip处理),为了将响应大小保持在最小值,我将响应中的键保持得非常短

例如,不使用说明:我使用d:,而使用宽度:我使用w:等等

这样做可以减小响应的大小,但在客户端,非常短的非人类readabe键会降低JavaScript代码(访问对象)的可读性

唯一的解决方案似乎是重新分析响应,用漂亮的键重建对象,或者在收到的原始对象中替换它们。但是这可能会损害JavaScript代码的性能,导致更多的延迟

是否存在更好的解决方案?


编辑:

正如比约恩·罗伯格(Björn Roberg)在他的评论中所说,我做了一个比较:

pretty-response.json       459,809 bytes
 short-response.json       245,881 bytes

pretty-response.json.zip    28,635 bytes
 short-response.json.zip    26,388 bytes
因此,当服务器压缩响应时,差异实际上是最小的

不过,漂亮的响应需要服务器压缩450KB的数据,而短响应只需要240KB


这是否会影响服务器性能(或者是否有办法衡量它)?

从阵列中检索对象时,可以使用decorator模式包装对象

但是,考虑到您可能希望访问所有返回的对象(为什么要返回客户端不需要的对象?),在从数组中检索时将对象转换为具有较长字段名的对象可能不会更慢,也可能更快

如果要多次检索每个对象,甚至可以遍历数组并逐个替换它们,以避免重复转换它们


所有这些选项都有性能成本,但可能并不重要。个人资料

使用

压缩库

您还可以通过在线检查json大小是否减小,来检查json大小。也许您可以试试看这是否有什么不同。它比许多其他序列化格式(如XML和JSON)更快、更轻

其他的格式也有相同的目标,但是协议缓冲区,也就是protobufs,是我想到的一种


请参阅以进行比较。

如果您希望代码可读并且仍然使用短键,则可以使用索引符号来访问成员:

var descriptionKey = 'd';
var widthKey = 'w';

//...

var description = yourObject[descriptionKey];

由于您正在考虑在客户端将短密钥转换回长密钥,因此您显然关心的是数据的带宽需求,而不是客户端的内存需求

我已经生成了一些包含随机数据和三个键(description、something和somethingElse)的文件。我还通过sed转储了数据,用d、s和e替换这些键

这导致:

750K   long-keys
457K   short-keys
HTTP有,所有重要的客户端都支持gzip。那么,如果我们gzip文件会发生什么情况:

187K   10:26 long-keys.gz
179K   10:27 short-keys.gz
在它们之间几乎没有什么可选择的,因为gzip非常擅长压缩重复的字符串

因此,只需使用HTTP压缩,而不用担心数据的压缩


gzip也是一种非常快速的算法,因此它对服务器性能的影响可以忽略不计

您是否尝试过使用“漂亮”键并比较传输的实际大小?当您说您有“很多”数据时,您在说多少?您可以使用“外包”JSON对象的存储,如果您有大量的元素需要存储,这将有所帮助process@BjörnRoberg看到我的编辑…我忍不住觉得,不管你的问题是什么,一定有比450kb的JSON更好的解决方案。@lonesomeday听起来像是自以为是(除了没用)因为你根本不知道应用程序做什么以及它是如何做的。将对象转换为具有更长字段的对象需要在客户端处理一段时间。我在1000到10000个元素之间。至于分析实际成本是多少,这很难,因为这取决于硬件/操作系统/浏览器的组合。。。要测试的案例太多了!您真的需要在一个页面上处理这么多对象吗?您不能在服务器上使用延迟加载和/或进行更多处理吗?是的,我可以。我知道响应如此之大是很奇怪的,但这正是web应用程序在某些用户操作上执行其任务所需的最小数据。问题是在客户端对其进行解压缩的计算成本。为什么不在服务器端进行压缩呢,我相信它会帮助你,我已经压缩了服务器端,这使得差异最小。但现在我想知道(因为我不知道如何衡量它)压缩450KB的istead(仅250KB)对服务器端的影响有多大?(参见我的编辑)您可以检查服务器的响应时间服务器的响应时间是许多事情的总和(每次都可变),其中压缩时间只是其中之一