I/O node.js . , . , 1 , 2 2 , .
sync-request request. , .
, -:
var req = require('request');
var sync = require('sync-request');
var N = 10;
console.log('BLOCKING test ==========');
var start = new Date().valueOf();
for (var i=0;i<N;i++) {
var res = sync('GET','http://www.example.com')
console.log('Downloaded ' + res.getBody().length + ' bytes');
}
var end = new Date().valueOf();
console.log('Total time: ' + (end-start) + 'ms');
console.log('NON-BLOCKING test ======');
var loaded = 0;
var start = new Date().valueOf();
for (var i=0;i<N;i++) {
req('http://www.example.com',function( err, response, body ) {
loaded++;
console.log('Downloaded ' + body.length + ' bytes');
if (loaded == N) {
var end = new Date().valueOf();
console.log('Total time: ' + (end-start) + 'ms');
}
})
}
, , , (, N = 10, 10 , ). , .
:
, , . CPU. (I/O, , , ), . , , :
async.waterfall([
function(cb) {
request(someUrl1, function(err, res, body) {
console.time('1');
console.timeEnd('1');
});
},
function(someParameters, cb) {
request({url: someUrl2, method: 'POST', form: {}}, function(err, res, body) {
console.time('2');
console.timeEnd('2');
});
},
function(jar, cb) {
request({url: someUrl3, method: 'GET', jar: jar }, function(err, res, body) {
console.time('3');
console.timeEnd('3');
});
},
function(moreParameters, cb) {
request({url: someUrl4, method: 'POST', jar: jar, form : {}}, function(err, res, body) {
console.time('4');
console.timeEnd('4');
});
}
], function (err, result) {
res.status(200).send();
});
" ". , , . , , node . , ( , 1 ) node javascript- .