加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用红宝石压缩大字符串

发布时间:2020-12-16 20:15:46 所属栏目:百科 来源:网络整理
导读:我有一个web应用程序( ruby on rails),它发送一些YAML作为一个隐藏的输入域的值. 现在我想减少发送到浏览器的文本的大小.无损压缩的最有效形式是什么是最少的数据发送?我可以在服务器端承担额外的压缩和解压缩成本. 解决方法 您可以使用ruby内核中的zlib实
我有一个web应用程序( ruby on rails),它发送一些YAML作为一个隐藏的输入域的值.

现在我想减少发送到浏览器的文本的大小.无损压缩的最有效形式是什么是最少的数据发送?我可以在服务器端承担额外的压缩和解压缩成本.

解决方法

您可以使用ruby内核中的zlib实现来进行数据删除:
require "zlib"
data = "some long yaml string" * 100
compressed_data = Zlib::Deflate.deflate(data)
#=> "xx9C+xCExCFMUxC8xC9xCFKWxA8LxCCxCDQ(.)xCAxCCK/x1Ex15x1Cx15x1Cx15x1Cx15x1Cx15x1Cx15x1Cx15x1Cx15Dx15x04x00xB3G%xA6"

您应该对压缩数据进行base64编码,使其可打印:

require 'base64'
encoded_data = Base64.encode64 compressed_data
#=> "eJwrzs9NVcjJz0tXqEzMzVEoLinKzEsvHhUcFRwVHBUcFRwVHBUcFUQVBACznRyWmn"

后来,在客户端,您可以使用pako(zlib端口到javascript)来获取您的数据. This answer可能有助于您实现JS部分.

为了让您了解这是多么有效,以下是示例字符串的大小:

data.size            # 2100
compressed_data.size #   48
encoded_data.size    #   66

在客户端压缩并在服务器上充气时,反之亦然.

Zlib::Inflate.inflate(Base64.decode64(encoded_data))
#=> "some long yaml stringsome long yaml str ... (shortened,as the string is long :)

免责声明:

> ruby?? zlib的实现应该与pako实现兼容.但我没有尝试过.>关于字符串大小的数字有点被骗. Zlib在这里真的很有效,因为字符串重复了很多.现实生活中的数据通常不会重复.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读