0
現在我正在分析我的nodejs應用程序,以便查找每個方法調用和回調的持續時間。如何在Nodejs中爲回調創建代理對象
我已經寫一些代碼對代理的每個方法調用,比如:
function addPerfProxyUnderPrototype(name, clazz) {
var fn = clazz.prototype[name];
clazz.prototype[name] = function() {
// var newArgs = getProxyArgs(arguments);
var s = new Date().getTime();
// var result = fn.apply(this, newArgs);
var result = fn.apply(this, arguments);
var e = new Date().getTime();
console.log('duration : ' + (e - s));
return result;
};
};
我可以通過這些代碼獲取方法調用的持續時間。正如你可能知道的,在nodejs應用中,參數包含回調函數。 nodejs應用代碼如下:
var clazz = function(){
}
clazz.prototype.send = function(callback){
// do somthing
callback(err, data);
}
我想爲回調參數創建一個代理來獲得持續時間。
function getProxyArgs(args) {
var newArgs = [];
for (var i = 0; i < args.length; i++) {
var arg = args[i];
if (typeof arg === 'function')) {
newArgs.push(function() {
var s = new Date().getTime();
var result = arg.apply(undefined, arguments);
var e = new Date().getTime();
console.log('duration : ' + (e - s));
return result;
});
} else {
newArgs.push(arg);
}
}
return newArgs;
};
上面的代碼將失去'this'。任何想法如何解決這個問題?