现在我正在分析我的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 app中,参数包含回调函数。 nodejs app代码如:
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;
};
以上代码将失去&#39;这个&#39;。知道如何解决这个问题吗?
答案 0 :(得分:0)
function getProxyArgs(args) {
var newArgs = [];
var self = this;
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(self, arguments);
var e = new Date().getTime();
console.log('duration : ' + (e - s));
return result;
});
} else {
newArgs.push(arg);
}
}
return newArgs;
};