【问题标题】:Is there a library available for compression in Javascript [closed]Javascript中是否有可用于压缩的库[关闭]
【发布时间】:2018-10-29 02:11:53
【问题描述】:

我正在寻找以压缩格式将数据从服务器发送到客户端(使用 ajax 请求),然后使用浏览器解压缩该数据? 有这个库吗?

我不是在寻找压缩 javascript 文件!

编辑:我认为问题不够清楚,我不想压缩 html 文件,我想在服务器上存储一些压缩的 LZMA 文件或任何其他压缩格式(如 obj 文件),然后我需要在我用 AJAX 得到它之后解压缩它们。不能与 gzip 同时压缩/解压缩。使用 Javascript 获取文件后打开已压缩的文件。

【问题讨论】:

  • 对于静态资源,配置正确的服务器已经为你做了压缩,浏览器会自动解压。对于您想要查询的动态查询,它更棘手但也是可能的。您使用什么服务器端语言?
  • 请注意,HTTP/1.1 已经支持三种不同的压缩格式('gzip'、'deflate' 和 'compress')。
  • @gkaytck:stackoverflow.com/questions/2349210/… 有什么帮助吗?
  • 我不太清楚您为什么坚持在客户端站点上进行解压缩。 Javascript没有很好的设计来操作字节数组,散列会很尴尬。然而,这很容易做到,只是很麻烦。您可以使用服务器端压缩/解压缩和 gzip 传输到客户端。这是一个更简单的解决方案。
  • 如果您通过 mod_gzip 使用 apache(并且仍然让浏览器透明地处理解压缩),还有提供预压缩文件的选项

标签: javascript compression lzma


【解决方案1】:

您的网络服务器(和浏览器)应该能够使用 gzip 透明地处理这个问题。如何设置取决于您使用的服务器。

在 apache 中检查 mod_deflate 或在 nginx 中启用 gzip。

浏览器会在数据到达您的 XHR 处理程序之前自动解压缩数据,您可以放心,您的数据在传输过程中已被尽可能多地压缩。

【讨论】:

  • 这并不真正适用于动态响应。通常需要额外的技巧来压缩它们。
  • 不确定是什么让你这么想?除非您正在处理某种流媒体应用程序。 apache 和 nginx 都会很高兴地 gzip 一个动态响应然后返回它,只需添加相关行以启用压缩。
【解决方案2】:

我知道,这是一个很晚的答案,但我发现这是一个有趣的选择:http://pieroxy.net/blog/pages/lz-string/index.html 它也有其他语言的实现!

我现在最喜欢的是pako。它非常快速且易于使用,并且兼容众所周知的zlib

【讨论】:

    【解决方案3】:

    这看起来很有希望:http://code.google.com/p/jslzjb/

    【讨论】:

    • -1,该库已损坏,它返回大于 255 的“字节”。
    • 对我来说很好用,其他更开发的(基于节点的)解决方案几乎是从该代码中逐字移植的,没有提及问题。
    【解决方案4】:

    Erik 所说的,http://code.google.com/p/jslzjb/

    这里有一些基本代码可以帮助您开始和解码。

     var stringStreamIn = function(s) {
         this.data = s;
         this.length = this.data.length;
         this.offset = -1;
         this.readByte = function(){
             if (++this.offset >= this.length) {
                 return null;
             }
             return this.data.charCodeAt(this.offset);
         };
     };
    
     var stringStreamOut = function() {
         this.data = '';
         this.length = function() { return this.data.length; };
         this.writeByte = function(value) {
             this.data += String.fromCharCode(value);
         };
     };
    
     var so = new stringStreamOut();
     var si = new stringStreamIn(atob("XQAAgAD//////////wAnG8AHA8+NCpYMj8Bgfez6bsJh4zoZx3fA+gih10oOa6rwYfkaucJIKX8T69I5iOe8WJwg/Ta7x3eHeDomxR6Vf824NLmKSrWHKdnM9n0D2aipzLbHv5//sTGAAA=="));
     LZMA.decompressFile(si, so);
     console.log(so.data);
    

    【讨论】:

      【解决方案5】:

      我不久前将 LZMA 移植到 GWT。如果您使用 GWT,这可能是一个可行的选择。

      https://code.google.com/p/gwt-lzma/

      【讨论】:

        猜你喜欢
        • 2018-07-27
        • 2010-10-21
        • 2014-08-29
        • 2012-07-13
        • 2010-11-04
        • 1970-01-01
        • 2011-12-03
        • 1970-01-01
        相关资源
        最近更新 更多