遇到到了一个问题
有n个ajax请求,ajax[1],ajax[2],...,ajax[n],统计每个ajax请求的响应时间,要求:不修改源代码
第一次听到这个问题,就想到了在ajax请求里面修改,但是如果对于一个老旧的项目,其实就不太合理了。
那么最好的方式就是面向切面的编程,搞过java的同学应该对这个并不陌生。那么在js中怎么实现面向切面的编程呢?
首先定义两个函数before和after
Function.prototype.before=function(func){
var _self=this;
return function(){
func.apply(this,arguments);
return _self.apply(this,arguments);
}
}
Function.prototype.after=function(func){
var _self=this;
return function(){
var res=_self.apply(this,arguments);
func.apply(this,arguments);
return res;
}
}
上面定义的两个函数相当于对你要执行的函数before执行和after执行某个函数
那么回到最开始的问题,统计响应时间,获取后台数据使用getJson()
function getJson(){
console.log('Request');
}
//不修改源代码的情况下统计响应时间
window.getJson=function (func){
return func=(function(){
var date;
return func.before(function(){
date=+new Date; //也可以使用Date.now
}).after(function(){
console.log('timeout',+new Date-date);
});
})();
}(window.getJson);
输出:
request
timeout 0
当然对于面试和应试来说最尴尬的事情莫过于
面试官:
应聘者: