刚接触Nodejs,关于http模块有一疑问
刚接触Nodejs,关于http模块有一疑问
昨晚开始学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。
数据量小且轻量json情况下,可以用api读出长度并且赋予content-length,甚至可以不用写 但是类似于模板输出,硬编码数据量比较大的情况下,如果声明content-length话,那么node须把数据全部读取然后存储到内存中,从而计算他的字节数,在随着http响应头报文输出给浏览器,假如并发数多或者说,服务器网络传输慢的话,这些数据都储存在内存里,可能会造成内存crash,所以建议用transfer-encoding,这种分块编码机制,读多少响应多少,直到服务器没有任务为止
在Node.js中使用HTTP模块创建的服务相比Nginx处理静态文件确实可能会慢一些。主要原因在于两者的用途不同:Node.js更适合处理动态内容和复杂的业务逻辑,而Nginx擅长于提供静态文件和负载均衡。
如果你只是在测试一个简单的HTTP服务(如返回"Hello World"),那么传输时间较长可能是因为Node.js需要启动一个事件循环来处理请求。而在Nginx中,它直接从磁盘读取静态文件并发送给客户端,因此速度更快。
示例代码
以下是一个简单的Node.js HTTP服务器代码:
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
如何优化
- 缓存:可以使用缓存机制来减少重复请求的时间。
- 并发处理:利用多线程或集群模式提升处理能力。
- 使用反向代理:例如,你可以将静态文件放在Nginx上,动态内容交给Node.js处理。
如果仅仅是测试HTTP服务,可以考虑以上优化方法,但在生产环境中,通常会结合Nginx和Node.js来实现高效的服务。