個人的にNode.jsを習得しようと色々調べてた時に
仕事でWebアプリの速度改善の依頼が飛び込んできたので、
Node.jsでHTTPリクエストのレスポンス時間をチェックしたい時は
どう書くのかな、と調べてみた。
HTTPリクエスト自体は下記の「request」モジュールを使うのが一般的のようだ。
色々探してみると、Stackoverflowでまさに同じ質問がされていて、
回答で良さげな関数「timeReq」が紹介されていた:
request関数をラップして、リクエスト前後の時間の差を取得して
返り値に追加してくれる。
var request = require('request'); var timeReq = function (url, next) { var start = new Date(); request(url, function (err, res, body) { if (err) { console.log(err); } res.responseTime = new Date() - start; next(err, res, body); }); };
この関数を利用して、指定されたWebページに指定回数アクセスして
各リクエストのレスポンスタイムと平均値を表示するスクリプトを作成してみた。
check_response.js
var request = require('request'); var _ = require('underscore'); var async = require('async'); var testUrl = '<チェックしたいURL>'; var checkTimes = <チェックする回数>; var timeReq = function (url, next) { var start = new Date(); request(url, function (err, res, body) { if (err) { console.log(err); } res.responseTime = new Date() - start; next(err, res, body); }); }; async.times(checkTimes, function (n, next) { timeReq(testUrl, function (err, res, body) { console.log('No.' + (n + 1) + ' responseTime: ' + res.responseTime); next(null, res.responseTime); }); }, function (err, responseTimes) { var sum = _.reduce(responseTimes, function (memo, num) { return memo + num; }, 0); var avgResTime = sum / checkTimes; console.log('Average: ' + avgResTime); });
このスクリプトの実用性はともかく、
既存の関数をラップして機能を拡張する例として参考になった。
- 作者: 小田圭二,榑松谷仁,平山毅,岡田憲昌
- 出版社/メーカー: 翔泳社
- 発売日: 2014/07/03
- メディア: Kindle版
- この商品を含むブログを見る