AJAX/JSON API 缩小?

AJAX/JSON API minification?

许多 JSON / RESTful API 具有长而冗长的键名,占构成文件的大部分字节。

例如,来自Twitter's REST API

"profile_sidebar_border_color": "DFDFDF",
"profile_sidebar_fill_color": "F3F3F3",
"profile_text_color": "333333",
"profile_use_background_image": true,
"default_profile": false,
"default_profile_image": false,

这样做还需要在客户端文件中使用这些名称。

对于开发来说,这很好,但对于生产来说,从服务器发送带有缩小(单字母)键的数据,然后在客户端重新膨胀似乎是有利可图的。

做得好,这可以在大型客户端库的缩小中减少数千字节,在 API.

中减少 50% 以上

是否存在用于此目的的库或解决方案?

gzip & DEFLATE 算法已经这样工作了。它们应该已经分别存在于服务器层和每个主要的网络浏览器中。

不同之处在于它们不仅使用单字母键,如 "a" 或 "b" 或 "c" 和 JSON。他们使用完整的 ASCII table 映射,不使用 JSON。它使用除 a、b 和 c 之外的其他 ASCII 字符,如制表符、CR、LF、ACK、BEL 等...有些字符看起来像红心、梅花、方块、黑桃、笑脸等...他们进一步优化 JSON,只使用这些字符中的每一个 {}[]:",,而不是 JSON 中的重复字符:{{"a":"1","b":[2,"blue"]},{"c":"3"}].

我们不需要 运行 JS 库来使用它们。 Web 服务器可能需要设置为启用 gzip 压缩,但根据我很久以前读到的内容,每个浏览器都默认启用了 DEFLATE。它会在检测到 gzip 数据时自动使用。

以下是它们工作原理的简要概述:HTML + CSS + JS 字符由网络服务器使用 gzip 压缩到字典映射中。因此,每个角色在该地图中只会出现一次。只有字典通过网络发送。未发送原始源代码。字典知道如何展开自身,回到原始源文件中。所以它不使用任何 JS 映射关键字或函数,它们通常出现在任何 CSS 或 JS .map 文件中。

当浏览器使用 DEFLATE 算法时,它会将每个字典取消映射(解压缩/膨胀)回可读的 HTML、CSS 或 JS 流。在客户端,浏览器显示字典映射的解压版本。这就是我们使用 F12 键在各种网络检查工具中读到的内容。这是一个无缝的压缩/解压过程,我们通常看不到。有时可以在服务器的 header 响应中看到 DEFLATE 关键字。

检查您的网络服务器是否已经使用 gzip 和 DEFLATE 算法。 LZ77 & LZ78 back-story is a fun starting point for seeing how high speed communication is possible in today's society. It seems like all of our minification & compression technology (for Internet webpage code, plus image file formats, plus broadcast cable TV, plus cell phone tower data transmission, etc...) is built on that research. Gzip is simply the freeware version of LZW, where LZW is used in Adobe Photoshop .tif files. For a "light read", here is a copy of the original IEEE LZ77 whitepaper.