提高网络速度并连接到node.js服务器时出现意外行为
Unexpected behavior when increasing network speed and connecting to a node.js server
我有一个简单的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/
相关文章:
- 使用node.js服务器中的evernote api获取note内容
- 使用JS在服务器上运行PHP脚本
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- 什么's本地node.js服务器和python简单http服务器之间的区别
- renderReact/Rect Router+Node/Express.js的服务器端/同构渲染中未定义renderP
- 在HTML页面上显示node.js服务器中的数据
- 正在使用Dropzone.js删除服务器上已重命名的文件
- Angular JS文件上传到托管服务器
- node.js将字符串转换为要上传到Web服务器的文件
- 将用户制作的SVG(raphael.js)发送到服务器(php),以便通过电子邮件发送
- 如何在Angular.js中循环动态添加Fields并获取数据并将其发送到服务器
- 将服务器js文件替换为本地js进行调试
- 如何从URL隐藏内容,但仍需要在node中发送到服务器.js并表达
- 节点中的 Web 服务器.js路径中的错误
- 运行 react/redux 应用程序所需的最低服务器.js
- 节点.js我做错了哪一部分?服务器.js正在运行,但我看不到 HTML 页面
- Node.js/MongoDB:如何使用module.exports将本地主机数据库URL传递给服务器.js文件
- 如何将值从辅助函数返回给服务器.js NodeJS
- 当新行从应用程序插入到mysql表时,监听来自节点服务器js的事件
- 评估服务器js文件的危险