昨晚开始学nodejs,按照教程创建了个简单的http服务,输出hello world.
通过chrome控制台记录到的页面传输时间高达150ms
而通过同服务器下的nginx打开一个静态页面,传输时间只有不到10ms
这是为何?
完全不可能。。。。。不是 node 的问题。
可以说详细点吗
我想知道怎么贴图。。 好吧,我手写一下。 nodejs的代码:
var http = require('http');
http.createServer(function(req,res){
res.writeHead(200,{'Content-Type':'text/html'});
res.write('<h1>hello nodejs</h1>');
res.end();
}).listen(999);
浏览器接收到的:
HTTP/1.1 200 OK
Content-Type: text/html
Date: Tue, 25 Feb 2014 02:36:01 GMT
Connection: keep-alive
Transfer-Encoding: chunked
消耗时间:
connecting:20ms
receiving:225ms
刚才测试的,然后我又通过nginx加载一个1KB的文件,才耗时26ms,费解。
http://115.28.221.33:8080/ 这是nginx http://115.28.221.33:999/ 这是nodejs
大家帮忙测试下看看啊
我这里的话,前者 25ms,后者 38ms。
@alsotang 嗯,我找到原因了,因为之前Transfer-Encoding: chunked,不能确定长度,我刚才修改了一下代码,确定了 content-length 头,就可以了
数据量小且轻量json情况下,可以用api读出长度并且赋予content-length,甚至可以不用写 但是类似于模板输出,硬编码数据量比较大的情况下,如果声明content-length话,那么node须把数据全部读取然后存储到内存中,从而计算他的字节数,在随着http响应头报文输出给浏览器,假如并发数多或者说,服务器网络传输慢的话,这些数据都储存在内存里,可能会造成内存crash,所以建议用transfer-encoding,这种分块编码机制,读多少响应多少,直到服务器没有任务为止
@zstxt1989 哇 活到老学到老
@zstxt1989 具体改动了哪里?贴出来让大家看看,我也很苦恼为什么不能贴图。这功能太弱了