在浏览器中解压缩一个JSON数据文件,作为Node.js中的静态文件

时间:2012-11-02 20:13:35

标签: javascript ajax node.js gzip http-compression

类似于this post需要向浏览器发送一个大的30MB JSON文件,压缩到3MB。 (是的,是的,解压缩是大而密集的,但更好的是将它作为一个静态文件提供一次,比如说,对REST API进行150次单独的AJAX调用,这里有一些前期加载时间可以。)

也像原始帖子一样,它是一个静态文件,因此可以提前压缩它(因此服务器不需要在每个请求上压缩它)。此外,可以从服务器上的公共目录提供它,在Node.js / Express.js中我将其标记为静态目录:

app.use(express.static(__dirname + "/public"));

一位评论者回复说:

“也可以预压缩你的JSON,然后告诉Apache使用适当的头文件来提供文件,以避免不得不一直重新压缩。”

问题1:我如何在Node / Express中执行此操作,即告诉Node告诉浏览器文件是否为gzip格式,以便浏览器自动解压缩它?

另一个答案是评论“......但请检查浏览器是否支持压缩”,这引发了另一个问题?

问题2:大多数〜现代浏览器能够解压缩内容吗?或者我最好只包括一个用于解压缩的javascript库,通过Ajax作为二进制文本获取数据,并始终使用我自己的代码而不是浏览器的本机实用程序解压缩它?

(就我的目的而言,可以排除一些旧的浏览器,例如放弃IE6就可以了,放弃对IE9的支持不会)

1 个答案:

答案 0 :(得分:3)

如果有Content-Encoding标题,浏览器应自动解压缩服务器响应。

使用node.js,您将使用标题提供已压缩的文件:

Content-Encoding: gzip

即:

res.setHeader( "Content-Encoding", "gzip" );

现代浏览器支持gzip,对于旧版浏览器,请检查http://www.schroepl.net/projekte/mod_gzip/browser.htm