Học lập trình web bằng Node.js

Nếu bạn đã chọn Node.js có nghĩa là bạn muốn ứng dụng của mình chạy tốc độ. Việc kiểm thử tốc độ luôn phải tiến hành song song với việc viết mã. Trong Node.js có rất nhiều module khác nhau, và cực kỳ nhiều cách khác nhau để giải quyết một vấn đề.

Do đó, để chọn ra cách nào cho tốc độ tốt nhất, hãy liên tục benchmark. JavaScript có 2 hàm để đánh dấu thời điểm bắt đầu và thời điểm kết thúc

console.time('taskA');
//Do something here
console.timeEnd('taskA');

Sau đây là ví dụ Node.js kết nối đến 2 dịch vụ:

  1. http://ip.jsontest.com/ để lấy địa chỉ IP của máy chạy Node.js
  2. http://www.geoplugin.net/json.gp?ip=aaa.bbb.ccc.ddd để dịch từ địa chỉ IP trả về từ dịch vụ đầu ra thông tin địa lý

Chúng ta sẽ benchmark tổng thời gian chạy 2 tác vụ trên và in ra console thời gian

var promise = require("bluebird"); //Sử dụng module Promise Async BlueBird
var needle = require('needle');  //Sử dụng module http client Needle
promise.promisifyAll(needle);
console.time('taskA');  //đánh dấu thời điểm bắt đầu
needle.getAsync('http://ip.jsontest.com/').then(function(response){
        return response[1].ip;
    }
).then(function(ip){
        return needle.getAsync('http://www.geoplugin.net/json.gp?ip=' + ip);
    }
).then(function(response){
        console.log(response[1]);
        console.timeEnd('taskA');
    }
).catch(function (e) {
        console.error('Error:' + e);
    }
);

Kết quả chạy bằng WebStorm, in ra màn hình console như sau:

/usr/local/bin/iojs needleBlueBirdChain.js
{
  "geoplugin_request":"113.190.11.211",
  "geoplugin_status":200,
  "geoplugin_credit":"Some of the returned data includes GeoLite data created by MaxMind, available from http:\/\/www.maxmind.com<\/a>.",
  "geoplugin_city":"Hanoi",
  "geoplugin_region":"Ha N\u1ed9i",
  "geoplugin_areaCode":"0",
  "geoplugin_dmaCode":"0",
  "geoplugin_countryCode":"VN",
  "geoplugin_countryName":"Vietnam",
  "geoplugin_continentCode":"AS",
  "geoplugin_latitude":"21.0333",
  "geoplugin_longitude":"105.849998",
  "geoplugin_regionCode":"44",
  "geoplugin_regionName":"Ha N\u1ed9i",
  "geoplugin_currencyCode":"VND",
  "geoplugin_currencySymbol":"₫",
  "geoplugin_currencySymbol_UTF8":"\u20ab",
  "geoplugin_currencyConverter":21357.5
}
taskA: 1118ms

Process finished with exit code 0