15

我正在开发一个包含 Javascript 的网页。此 js 使用存储在平面文件中的静态字符串数据(约 1-2 MB)。我可以使用 gzip 或任何其他算法对其进行压缩以减少传输负载。

是否可以使用 Ajax 获取此二进制文件并在客户端浏览器中将其解压缩为字符串(我可以稍后拆分)。如果是,我怎样才能做到这一点?有人有代码示例吗?

4

3 回答 3

12

另一个图书馆或网站就是这个,虽然它的例子很少,但它有一些可以看到的全面测试用例。

https://github.com/imaya/zlib.js

以下是一些复杂的测试用例 https://github.com/imaya/zlib.js/blob/master/test/browser-test.js https://github.com/imaya/zlib.js/blob/master /test/browser-plain-test.js

代码示例看起来非常紧凑。就这两行代码...

// compressed = Array.<number> or Uint8Array
var gunzip = new Zlib.Gunzip(compressed);
var plain = gunzip.decompress();

如果你看这里https://github.com/imaya/zlib.js/blob/master/bin/gunzip.min.js你会看到他们有你需要包含的打包的 js 文件。您可能需要在https://github.com/imaya/zlib.js/blob/master/bin中包含其他一两个。

无论如何,将这些文件放入您的页面,然后将来自服务器的预压缩数据提供给 GUnzip 对象,然后它将按预期进行。

您需要自己下载数据并使用其他函数将其放入数组中。我认为他们不包括这种支持。

因此,请尝试从https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Sending_and_Receiving_Binary_Data下载这些示例

function load_binary_resource(url) {
  var req = new XMLHttpRequest();
  req.open('GET', url, false);
  req.overrideMimeType('text\/plain; charset=x-user-defined');
  req.send(null);
  if (req.status != 200) return '';
  return req.responseText;
}

// Each byte is now encoded in a 2 byte string character. Just AND it with 0xFF to get the actual byte and then feed that to GUnzip...
var filestream = load_binary_resource(url);
var abyte = filestream.charCodeAt(x) & 0xff; // throw away high-order byte (f7)

====================================== 还有Node.js

问题类似于 在 Node.js 跨平台中下载和解压缩文件的最简单方法?

nodejs 文档中有此示例代码。我不知道它比那更具体... http://nodejs.org/api/zlib.html

于 2013-02-18T01:47:12.770 回答
3

只需在 Apache 上启用 Gzip 压缩,一切都会自动完成。

可能您必须将字符串作为 json 存储在 .js 文件中,并为 js mime 类型启用 gzip。

于 2013-02-06T11:26:25.567 回答
1

我记得我将js-deflate用于具有大型数据库的离线 JS 应用程序(由于本地存储的限制而需要)并且运行良好。这取决于js-base64

于 2013-02-06T11:28:40.550 回答