JavaScript 文本压缩/解压缩

4
假设我有一个400K的文本文件,我想从javascript中读取。问题是,我的目标受众连接速度较慢,因此400k可能需要太长时间才能加载。
我想我需要压缩文件,但是,如何在客户端javascript上解压缩呢?
这样做值得吗?还是解压所需的时间会抵消下载节省的时间?
更新
只是为了明确,该文件是文本(数据),而不是代码。

1
这取决于文本文件包含什么内容!基本上,压缩将删除额外的空格和换行符,这可以大大减小文件大小,但是你如何在客户端重新构建它呢? - Kirtan
7个回答

8

您可以使用GZip压缩文本文件,并将其发送到浏览器。这样,您就无需在客户端执行任何操作,浏览器本身将对其进行解压缩。


1

你能使用HTTP压缩吗?


4
可以更加礼貌一点。 - NLV
2
@hasenj,Bluephlame提出了一个解决方案。在我看来,这是最好的一个。 - Massimo

1

我刚试了一下,它增加了大小而不是减小它。 - hasen
是的,在少量文本上它确实会增加大小,但当您放入几页随机文本时,它会压缩得非常好。我看到了30-50%的压缩率。 - Travis
如果你想要一个自己动手的压缩方案(不是由@Bluephlame提供的真正解决方案),请查看位于http://140byt.es/的神奇JavaScript LZW。 - Massimo

0

是的,您不需要自己处理压缩/解压缩,浏览器会为您完成,您只需要指定您使用的服务器的参数即可。 注意:您可以明确指定响应格式的所有MimeType。 例如:

以下是Tomcat服务器设置参数。

   <Connector port="8443" 
     protocol="org.apache.coyote.http11.Http11Protocol"
           SSLEnabled="true"
           maxThreads="200"
           compression="on"
           compressionMinSize="2048"
           compressableMimeType="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,charset=UTF-8,application/x-www-form-urlencoded,text/html,text/plain,text/css,text/javascript,text/json,application/x-javascript,application/javascript,application/json"
   />

为了确保压缩功能正常工作,您可以进行以下检查: 按下F12(开发者工具)[我的是Chrome] -> 网络选项卡 -> 开始录制。 点击响应所需数据/文本的请求URL。 然后转到头部选项卡。
您将会看到:
请求/响应头部
Content-Encoding:gzip

Accept-Encoding: gzip, deflate

这是使用编码的,网络选项卡中的大小列将显示已减小的大小。


0

[旧问题,但以防其他人遇到相同问题...]

处理这个问题的最佳方法是使用HTTP压缩。所有主流网络服务器和浏览器都支持此功能。事实上,如果你正在使用一个网络托管服务,并且你的文件是通常需要压缩传输的文件类型(例如css、js、html),那么它很可能已经在传输过程中进行了压缩,只是你没有意识到而已。


-1

[这是一个很老的问题,但仍然会出现在搜索结果中]

最终我写了一个小型、自包含的库来完成这个任务。它可以将JSON数据压缩/解压缩成可打印的ASCII字符串。经过压缩后,解压器的大小为2410字节,压缩器的大小为3177字节。

https://github.com/TGlas/json-compression


-3

解压缩 JavaScript

不可能隐藏压缩的代码。

/packer/ 压缩过的典型 JavaScript 以以下代码开头:

      `eval(function(p,a,c,k,e,r)`…
      `eval` can simply be replaced by `alert`.

eval函数评估包含JavaScript的字符串参数。在大多数打包程序中,eval通常与document.write一起使用。

要解压JavaScript,请将这些方法替换为以下方法之一:

1. alert替换eval例如:alert(function(p,a,c,k,e,r)……并在打开或刷新html页面时,在弹出窗口中简单地打印代码

2. 如果JavaScript出现在<body>元素之后,您可以添加一个<textarea>,如下所示:

      `<textarea id="code"></textarea>`

然后,将eval(...);替换为document.getElementById("code").value=...;

从这两个选项中,第一个更简单...祝你好运 :)


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