我有一个用打字稿编写的框架。这些方法有很多依赖于浏览器打开并执行某些操作的方法。我想捕获每个人的延迟指标。到目前为止我想到了以下2种方法-
方法-1:
export const startSession = async function (): Promise<void> {
const startTime = Date.now()
//Method performs some actions.
const endTime = Date.now()
const executionTimeMs = endTime - startTime
const performanceLog: performanceMetrics = {
apiName: "startSession",
executionTime: executionTimeMs
}
publishMetrics(performanceLog)
}
如果我们选择此方法,我们将必须使用这些调用更新所有方法。另一种方法看起来像这样 -
方法2
export const startSession = withPermanceLogging(async function (): Promise<void> {
//Method performs some actions.
})
function withPermanceLogging<F extends (...args: any) => any>(fn: F): F {
return (async (...args: Parameters<F>) => {
const startTime = Date.now()
const ret = await fn(...args as any)
const endTime = Date.now()
const executionTimeMs = endTime - startTime
const performanceLog: performanceMetrics = {
apiName: fn.name,
executionTime: executionTimeMs
}
publishMetrics(performanceLog)
return ret
}) as F
}
此方法在回调/.then的情况下不起作用
还有其他选项可用于捕获方法的指标吗?