Just started testing nodejs, and wanted to get some help in understanding following behavior:
Example #1:
var http = require('http');
http.createServer(function(req, res){
res.writeHeader(200, {'Content-Type': 'text/plain'});
res.end('foo');
}).listen(1001, '0.0.0.0');
Example #2:
var http = require('http');
http.createServer(function(req, res){
res.writeHeader(200, {'Content-Type': 'text/plain'});
res.write('foo');
res.end('bar');
}).listen(1001, '0.0.0.0');
When testing response time in Chrome:
example #1 - 6-10ms
example #2 - 200-220ms
But, if test both examples through nginx proxy_pass
server{
listen 1011;
location / {
proxy_pass http://127.0.0.1:1001;
}
}
i get this:
example #1 - 4-8ms
example #2 - 4-8ms
I am not an expert on either nodejs or nginx, and asking if someone can explain this?
nodejs - v.0.8.1
nginx - v.1.2.2
update:
thanks to Hippo, i made test with ab on my server with and without nginx, and got opposite results.
also added to nginx config proxy_cache off
server{
listen 1011;
location / {
proxy_pass http://127.0.0.1:1001;
proxy_cache off;
}
}
example #1 direct:
ab -n 1000 -c 50 http:// 127.0.0.1:1001/
Server Software: Server Hostname: 127.0.0.1 Server Port: 1001 Document Path: / Document Length: 65 bytes Concurrency Level: 50 Time taken for tests: 1.018 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 166000 bytes HTML transferred: 65000 bytes Requests per second: 981.96 [#/sec] (mean) Time per request: 50.919 [ms] (mean) Time per request: 1.018 [ms] (mean, across all concurrent requests) Transfer rate: 159.18 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.6 0 3 Processing: 0 50 44.9 19 183 Waiting: 0 49 44.8 17 183 Total: 1 50 44.7 19 183
example #1 nginx:
ab -n 1000 -c 50 http:// 127.0.0.1:1011/
Server Software: nginx/1.2.2 Server Hostname: 127.0.0.1 Server Port: 1011 Document Path: / Document Length: 65 bytes Concurrency Level: 50 Time taken for tests: 1.609 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 187000 bytes HTML transferred: 65000 bytes Requests per second: 621.40 [#/sec] (mean) Time per request: 80.463 [ms] (mean) Time per request: 1.609 [ms] (mean, across all concurrent requests) Transfer rate: 113.48 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.6 0 3 Processing: 2 77 44.9 96 288 Waiting: 2 77 44.8 96 288 Total: 3 78 44.7 96 288
example #2 direct:
ab -n 1000 -c 50 http:// 127.0.0.1:1001/
Server Software: Server Hostname: 127.0.0.1 Server Port: 1001 Document Path: / Document Length: 76 bytes Concurrency Level: 50 Time taken for tests: 1.257 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 177000 bytes HTML transferred: 76000 bytes Requests per second: 795.47 [#/sec] (mean) Time per request: 62.856 [ms] (mean) Time per request: 1.257 [ms] (mean, across all concurrent requests) Transfer rate: 137.50 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.3 0 2 Processing: 0 60 47.8 88 193 Waiting: 0 60 47.8 87 193 Total: 0 61 47.7 88 193
example #2 nginx:
ab -n 1000 -c 50 http:// 127.0.0.1:1011/
Server Software: nginx/1.2.2 Server Hostname: 127.0.0.1 Server Port: 1011 Document Path: / Document Length: 76 bytes Concurrency Level: 50 Time taken for tests: 1.754 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 198000 bytes HTML transferred: 76000 bytes Requests per second: 570.03 [#/sec] (mean) Time per request: 87.715 [ms] (mean) Time per request: 1.754 [ms] (mean, across all concurrent requests) Transfer rate: 110.22 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.4 0 2 Processing: 1 87 42.1 98 222 Waiting: 1 86 42.3 98 222 Total: 1 87 42.0 98 222
Now results looks more logic, but still there is a strange delay when calling res.write()
I guess it was (sure looks like) a stupid question, but i still get huge difference in response time in browser with this server configuration (Centos 6) and this concrete server (vps).
On my home computer (Ubuntu 12) but with older versions testing from localhost everything works fine.