包装函数 函数执行记时
function timed(f) {
return function (...args) { //把实参收集到一个剩余形参数组args中
console.log(`输入函数:${f.name}`);
let startTime=Date.now();
try{
return f(...args)
}
finally{
//在返回被包装的返回值之前,打印经过的时间
console.log(`执行函数:${f.name} 耗时:${Date.now() - startTime}ms`)
}
}
}
//简单粗暴的方式计算1到n的数值之和
function benchmark(n) {
let sum=0;
for(let i=1;i<=n;i++) sum+=i;
return sum;
}
timed(benchmark)(100000)
包装方法 方法执行记时
function trace(o, m) {
let original = o[m];
o[m] = function (...args) {
let startTime = Date.now();
console.log(`开始执行:${m} 开始时间:${startTime.valueOf()}`)
let result = original.apply(this, args)
let endTime = Date.now();
console.log(`结束执行:${m} 结束时间:${endTime.valueOf()}`)
console.log(`执行方法:${m} 耗时:${endTime - startTime}ms`)
return result;
}
}
let o = {
benchmark(n) {
let sum = 0;
for (let i = 1; i <= n; i++) sum += i;
return sum;
}
}
trace(o, "benchmark”)//改装替换对象的方法
o.benchmark(100000000)//执行替换后的方法