用红宝石压缩大字符串

前端之家收集整理的这篇文章主要介绍了用红宝石压缩大字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个web应用程序( ruby on rails),它发送一些YAML作为一个隐藏的输入域的值.

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

解决方法

您可以使用ruby内核中的zlib实现来进行数据删除
require "zlib"
data = "some long yaml string" * 100
compressed_data = Zlib::Deflate.deflate(data)
#=> "x\x9C+\xCE\xCFMU\xC8\xC9\xCFKW\xA8L\xCC\xCDQ(.)\xCA\xCCK/\x1E\x15\x1C\x15\x1C\x15\x1C\x15\x1C\x15\x1C\x15\x1C\x15\x1C\x15D\x15\x04\x00\xB3G%\xA6"

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

require 'base64'
encoded_data = Base64.encode64 compressed_data
#=> "eJwrzs9NVcjJz0tXqEzMzVEoLinKzEsvHhUcFRwVHBUcFRwVHBUcFUQVBACz\nRyWm\n"

后来,在客户端,您可以使用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在这里真的很有效,因为字符串重复了很多.现实生活中的数据通常不会重复.

猜你在找的Ruby相关文章