问题 获取压缩文本文件并在客户端浏览器中解压缩,在Javascript中可行吗?


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

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


3134
2018-02-06 11:23


起源

你能指定一下它是什么文件吗?如果已知文件类型,则可能会建议更合适的方法。 - Joseph
这是一个文本文件。 - Jérôme Verstrynge
我知道你提到你无法访问服务器配置,但是你可以执行服务器端脚本吗?以PHP为例?如果是这样,您可以请求一个php脚本,而不是直接请求文件,该脚本将设置Content-Encoding:gzip标头,然后输出该文件的gzip压缩版本。 - Nathan Stretch
内森,很好的建议,我没有考虑过。的确,我可以访问PHP ... - Jérôme Verstrynge


答案:


另一个库或站点是这个,虽然它的例子很少,但它有一些可以看到的完整的测试用例。

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


10
2018-02-18 01:47





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

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


3
2018-02-06 11:26



我知道这个选项,但不幸的是,这不能启用。我无法访问服务器。 - Jérôme Verstrynge
移至其他网络主机。您将花费更多时间来解决当前主机的限制,而不是寻找适合您需求的主机。 - Sean Hogan


我记得我用过 JS-放气 对于具有大型数据库的off-linne JS应用程序(由于本地存储的限制而需要)并且工作得很好。这取决于 JS-的base64


1
2018-02-06 11:28



这是另一个: github.com/gildas-lormeau/zip.js - Matthias
blog.another-d-mention.ro/programming/... - Matthias