【问题标题】:Compressing a JSON string? (And strings in general)压缩 JSON 字符串? (和一般的字符串)
【发布时间】:2016-01-17 14:56:25
【问题描述】:

我应该如何压缩一个非常大的 JSON 字符串以通过 websockets 传输? (也稍后存储在localStorage中)

它已经被缩小了,但我需要一些可以做到这一点的东西:http://www.unit-conversion.info/texttools/compress/(我尝试在那里查看源代码但无法弄清楚)

【问题讨论】:

  • 真正的问题是,为什么要通过 websockets 发送一个非常大的字符串,然后将其存储在 localstorage 中,这有什么用例,通常有更好的方法来存储和访问数据。
  • 您不必担心。通过 websockets 发送的数据将使用permessage-deflate 扩展名自动压缩。
  • @adeneo 我通过websockets传输的数据和本地存储的数据不是同一个数据,我只是说我以后还需要压缩本地存储的字符串。
  • @Tresdin 有什么好的方法可以找出通过 websocket 连接实际传输的内容吗?我在 node 中使用 ws 模块,在客户端使用 vanilla websockets。
  • 为什么第一条评论总是一个缺乏想象力的“为什么”?

标签: javascript json node.js


【解决方案1】:

您可以使用 Node.js 压缩任何类型的二进制数据(字符串、缓冲区),无需外部部门,使用 zlib 模块。

您可以根据需要使用 gzip 或 deflate 压缩算法。

示例

(无耻地从 Node.js 的网站上窃取)

const zlib = require('zlib')
const input = JSON.stringify({ some: 'json-data' })

zlib.deflate(input, (err, buffer) => {
  if (err) {
    console.log('u-oh')
  }

  // Send buffer as string to client using my imaginary io object
  io.send(buffer.toString('base64'))
})

更新:最好只在传输层启用HTTP compression,而不是自己压缩和解压缩数据。

【讨论】:

  • 我需要在客户端解压缩它,zlib 库是否也以可以包含在客户端网页上的方式存在?我还想压缩来自客户端的数据并发送到服务器。
  • 您可以尝试使用this。但是,我想知道 - 仅在 HTTP 传输层上启用 gzip 压缩而不是在 API 层实现压缩不是更有意义吗?我已经用相关说明更新了答案。
  • 不完全确定我会怎么做,我在节点中使用ws,在javascript中使用websockets,所有的网络东西都是为我处理的哈哈
  • 您可以使用 Websocket 的扩展 - 请参阅 this SO question and answer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
相关资源
最近更新 更多