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

Unexpected behavior when increasing network speed and connecting to a node.js server

本文关键字:服务器 js 意外 node 高网络 网络 连接 速度      更新时间:2023-12-17

我有一个简单的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);

我发送的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

我不认为下载时间应该在250kbps后网络速度增加时增加。发生了什么事
再次看看如果我删除压缩会发生什么:

var app = require('express')();
app.get('/', function(request, response) {
  response.send('<!DOCTYPE html>.......');
}
app.listen(2345);

现在文件只有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

带有非gzipped内容(和contet长度标头)的响应似乎可以,但带有gzipped属性(带有传输编码的chunked标头)的回应似乎不可以。
这是怎么回事
我强烈建议您使用自己喜欢的任何工具模拟类似的测试,并在说我的基准测试是错误的,这是不可能的之前亲自查看结果。如果你得到不同的结果,请分享

Express.js压缩选项

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

压缩树级别

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

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

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

HTTP压缩并不总是更快

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

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