增加网络速度并连接到node.js服务器时出现意外行为

Cor*_*ped 23 javascript performance node.js express

我有一个简单的node.js服务器,如:

var app = require('express')();
var compression = require('compression');
app.use(compression());

app.get('/', function(request, response) {
  response.send('<!DOCTYPE html>.......');
}
app.listen(2345);
Run Code Online (Sandbox Code Playgroud)

我发送的html是2.4kB(压缩时为1.2kB).
当在不同的网络速度上测试时(使用开发工具),我得到了这种意外行为:

50kbps:  Latency 600ms, download   1ms
250kbps: Latency 300ms, download 0.6ms
750kbps: Latency 100ms, download 100ms
2Mbps:   Latency  10ms, download 200ms
32Mbps:  Latency   5ms, download 210ms
Run Code Online (Sandbox Code Playgroud)

我不认为在250kbps之后网络速度增加时下载时间应该会增加.到底是怎么回事?
再看看如果我删除压缩会发生什么:

var app = require('express')();

app.get('/', function(request, response) {
  response.send('<!DOCTYPE html>.......');
}
app.listen(2345);
Run Code Online (Sandbox Code Playgroud)

现在该文件只有2.4kB,并查看延迟/下载时间:

50kbps:  Latency 550ms, download 230ms
250kbps: Latency 350ms, download  50ms
750kbps: Latency 120ms, download  15ms
2Mbps:   Latency  35ms, download   6ms
32Mbps:  Latency   4ms, download 0.5ms
Run Code Online (Sandbox Code Playgroud)

使用非gzip压缩内容(和contet-length标头)的响应似乎没问题,但是使用gzip压缩内容(使用transfer-encoding chunked header)的响应似乎不合适.
这是怎么回事?
我强烈建议您使用您喜欢的任何工具自己模拟类似的测试,并在说出我的基准测试错误之前自己查看结果,这是不可能的.如果您得到不同的结果,请分享.

mes*_*lds 1

Express.js 压缩选项

我也会毫不犹豫地更改不同的压缩质量设置、策略,尤其是快速压缩模块的阈值设置,如下所述:https: //github.com/expressjs/compression,特别是:

压缩阈值水平

由于您仅发送几个字节的文本数据作为正文,因此请尝试将阈值设置为低于默认值1Kb

响应考虑压缩前响应正文大小的字节阈值,默认为 1kb。这是字节数、字节模块接受的任何字符串,或者 false。

(引用自express压缩模块github页面)

HTTP 压缩并不总是更快

确保使用其他 HTTP 功能,例如 HTTP 管道或接受的编码(也在客户端),因为打开或关闭这些功能可能会极大地改变下载时间的结果。

IBM 进行了一系列出色的 HTTP 测试,我建议您在这里阅读:http://www.ibm.com/developerworks/library/wa-httpcomp/