Node.js和Express.js如何使用gzip压缩JSON内容?

4

我正在使用Express的res.end等功能来作为我的REST API的一部分提供JSON。

Google Pagespeed告诉我需要对其进行gzip压缩。

然而,根据这个帖子:

http://groups.google.com/group/express-js/browse_thread/thread/db1ad3307cb4f504/64f02170f616527c

这似乎不是一个好主意。毕竟,该内容是动态的且无法缓存,因此在每个请求之前进行gzip压缩似乎不会带来净收益。

我是正确的吗?还是应该继续使用gzip,谢谢。

明确一点:静态内容(css、js)已经被gzip压缩。

1个回答

5
Gzip可以显著提高网站性能,特别是在慢速/移动连接上,因为它减少了浏览器必须接收的数据量(和数据包量)。

我不知道Express中具体的实现方式,但使用Gzip是在服务器CPU时间和带宽之间进行权衡。您需要在服务器上消耗更多的CPU来压缩内容,但可以减少带宽使用、页面加载时间以及Web服务器发送数据到浏览器时必须保持套接字打开的时间。每个最佳实践指南和页面速度分析软件(如Google Page Speed、Web Page Test等)都强烈建议使用Gzip,因此我认为这样做是值得的。

关于如何在Express中实现它,我个人使用Nginx代理所有请求到我的Express应用程序(并提供静态内容),因此我只需在将它们发送到客户端之前配置Nginx来压缩HTML、CSS、Javascript和一些其他类型的资源。

一些参考资料:


你在每个请求之前都使用gzip压缩吗? - Harry
是的,在将每个页面发送回客户端之前,它们都会在实时中进行压缩(这几乎是启用Gzip的每个站点都会做的)。如果我有一些静态资源在一段时间内不会更改,我通常会在磁盘上预先压缩它们,并指示Nginx在浏览器支持时发送.gz版本。 - MartinodF
一些Web Gzip实现将具有一些选项,仅压缩文本格式 - text/plain、text/html、application/json、application/xml - 仅在有效载荷超过最小大小(如1K或其他)时才进行压缩。这避免了压缩效果不佳的文件被压缩。我还见过这样的情况:如果压缩后文件大小没有变小,则会发送未压缩版本。 - Dobes Vandermeer

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