Node.js nodejs响应压缩建议

Node.js nodejs响应压缩建议,node.js,nginx,gzip,scalability,Node.js,Nginx,Gzip,Scalability,我已经使用NodeJS编写了一个API服务器。它基本上是一个REST服务器,它公开了一些命令,这些命令的响应是一个或多个数据库查询的结果。最后一个JSON被发送到客户端。没什么原创的 我想实现响应压缩,因为典型的内容长度是5-20kb(json)文本,一旦压缩,就会下降到1-5kb 预计会有中等到较大的负载,我有一个难题:阅读了大量关于NodeJ弱点的文档,如果(唯一)线程被计算昂贵的函数阻塞,我不知道是否: a) 根本不要实现压缩,“毕竟,20kb没有那么多,也许让事情保持超简单可能会更好”

我已经使用NodeJS编写了一个API服务器。它基本上是一个REST服务器,它公开了一些命令,这些命令的响应是一个或多个数据库查询的结果。最后一个JSON被发送到客户端。没什么原创的

我想实现响应压缩,因为典型的
内容长度
是5-20kb(json)文本,一旦压缩,就会下降到1-5kb

预计会有中等到较大的负载,我有一个难题:阅读了大量关于NodeJ弱点的文档,如果(唯一)线程被计算昂贵的函数阻塞,我不知道是否:

a) 根本不要实现压缩,“毕竟,20kb没有那么多,也许让事情保持超简单可能会更好”

b) 使用zlibnodejs模块实现GZIP压缩,该模块允许异步压缩响应。然后,我将在有问题的地方增加开销,但是响应大小将被削减到1/4

c) 通过NGINX代理nodej并配置NGIX以压缩响应。这似乎是两全其美,但我不知道NGINX(在同一硬件中)的CPU+socket+memory开销是否会比(a)甚至(b)更糟糕


您认为如何?

这里的挑战在于您没有解释实现压缩的强烈动机或理由,因此如果不了解这一点,我们就无法真正参与到是否实现压缩的权衡中。一般来说,您不应该在实现或部署中增加复杂性(例如压缩),除非您确信这种复杂性是一种净收益。因此,核心问题似乎是,首先实现压缩的主要原因是什么?20k一开始并不算大(与网页上提供的大多数图像相比微不足道)。好吧,我的动机是,我害怕锁定NodeJS的唯一线程,并且随着每秒请求数的增长,浪费宝贵的时间只是gzip。但另一方面,压缩会将响应大小减少3/4,这也是非常有趣的事情。20-30Kb对于单个响应来说似乎不算多,但其想法是每秒发送数百个请求。我只是对一些在NodeJS上有生产服务器经验的人的“最佳实践”意见感兴趣,我来自传统的Java世界,并且习惯于像apache/nginx/etc这样的代理来做肮脏的工作,就个人而言,在你知道你有带宽使用问题,证明增加的开发和可伸缩性测试是合理的之前,你不会干扰额外的压缩计算。一旦你被启动并处于高负载状态,你可能会有更多更重要的事情要做。最好在没有压缩的情况下启动,然后在有了操作经验后再决定在何处部署额外的开发人员资源。酷:)感谢您的宝贵评论fyi,在多核服务器上,到时候,如果您最终需要/想要使用node.js,您可以使用更多可用的CPU。这里的挑战是,您没有解释实现压缩的强烈动机或理由,因此不了解这一点,我们不能真正参与到是否实施它的权衡中。一般来说,您不应该在实现或部署中增加复杂性(例如压缩),除非您确信这种复杂性是一种净收益。因此,核心问题似乎是,首先实现压缩的主要原因是什么?20k一开始并不算大(与网页上提供的大多数图像相比微不足道)。好吧,我的动机是,我害怕锁定NodeJS的唯一线程,并且随着每秒请求数的增长,浪费宝贵的时间只是gzip。但另一方面,压缩会将响应大小减少3/4,这也是非常有趣的事情。20-30Kb对于单个响应来说似乎不算多,但其想法是每秒发送数百个请求。我只是对一些在NodeJS上有生产服务器经验的人的“最佳实践”意见感兴趣,我来自传统的Java世界,并且习惯于像apache/nginx/etc这样的代理来做肮脏的工作,就个人而言,在你知道你有带宽使用问题,证明增加的开发和可伸缩性测试是合理的之前,你不会干扰额外的压缩计算。一旦你被启动并处于高负载状态,你可能会有更多更重要的事情要做。最好在没有压缩的情况下启动,然后在有了操作经验后再决定在何处部署额外的开发人员资源。酷:)感谢您的宝贵评论fyi,在多核服务器上,到时候,如果您最终需要/想要使用node.js,您可以使用更多可用的CPU。这里的挑战是,您没有解释实现压缩的强烈动机或理由,因此不了解这一点,我们不能真正参与到是否实施它的权衡中。一般来说,您不应该在实现或部署中增加复杂性(例如压缩),除非您确信这种复杂性是一种净收益。因此,核心问题似乎是,首先实现压缩的主要原因是什么?20k一开始并不算大(与网页上提供的大多数图像相比微不足道)。好吧,我的动机是,我害怕锁定NodeJS的唯一线程,并且随着每秒请求数的增长,浪费宝贵的时间只是gzip。但另一方面,压缩会将响应大小减少3/4,这也是非常有趣的事情。20-30Kb对于单个响应来说似乎不算多,但其想法是每秒发送数百个请求。我只是对一些在NodeJS上有生产服务器经验的人提出的“最佳实践”意见感兴趣,我来自传统的Java世界,正在使用它