JavaScript是否有可用的压缩库?

9
我希望能够从服务器以压缩格式向客户端发送数据(使用ajax请求),并在浏览器中解压缩该数据?是否有相应的库可用?
我不是要压缩JavaScript文件!
编辑:我认为问题表述不够清晰,我不想压缩HTML文件,我想在服务器上存储一些已压缩的LZMA文件或其他压缩格式(如obj文件),然后在通过AJAX获取它们后进行解压缩。不是使用gzip同时进行压缩/解压缩。使用JavaScript打开已经压缩过的文件。

对于静态资源,一个正确配置的服务器将会自动为您进行压缩,浏览器也会自动解压缩。对于像您想要查询的动态资源,这更加棘手,但也是可能的。您使用的是哪种服务器端语言? - Pekka
请注意,HTTP/1.1已经支持三种不同的压缩格式('gzip'、'deflate'和'compress')。 - Josef Pfleger
@gkaytck:这个有用吗?http://stackoverflow.com/questions/2349210/how-to-compress-data-on-asp-net-and-uncompress-in-javascript - wilbbe01
我不太确定为什么你坚持在客户端进行解压缩。Javascript 不太适合操作字节数组,而哈希处理也会很麻烦。但这是可行的,只是比较繁琐。你可以使用服务器端的压缩/解压缩和 gzip 来传输到客户端。这是一个更简单的解决方案。 - bestsss
如果您正在使用Apache通过mod_gzip,还可以选择提供预压缩文件的选项(并且仍然让浏览器透明地处理解压缩)。 - Chris Farmiloe
5个回答

7
你的网站服务器(和浏览器)应该能够透明地使用gzip来处理数据。如何设置将取决于你使用的服务器。在apache中查看mod_deflate或在nginx中启用gzip。浏览器将在到达XHR处理程序之前自动解压缩数据,你可以放心地知道你的数据在传输过程中被尽可能压缩。

这并不适用于动态响应。通常需要其他技巧来压缩它们。 - Pekka
1
不确定是什么让你这样想?除非你正在处理某种流媒体应用程序。只需添加相关行以启用压缩,Apache和Nginx都可以愉快地对动态响应进行gzip压缩,然后返回它。 - Chris Farmiloe

5

0
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);

0

0

3
那个库出现问题了,返回的“bytes”大于255。 - aaaaaaaaaaaa
对我来说运行良好,而其他更成熟的(基于节点的)解决方案几乎是逐字从那段代码移植过来的,没有提到任何问题。 - Orwellophile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接