6记录异步函数的执行时间的详细方案

6记录异步函数的执行时间的详细方案


函数是一个异步函数,我们希望对它进行分析(性能分析)。通常,它的最后一个参数是回调:
钙(Arg(呃,RES)= console.log(ERR | | RES))
也许最简单的剖析性能的方法是像一个函数一样,是将一个时间逻辑添加到我们需要分析的地方:
const T0 = Date.now()
钙(精)
const T1 = date.now()
console.log(`日志:时间:$ { T1 = t0 } `)
console.log(ERR RES | |)
})
然而,这并不是一个可重用的解决方案,每次我们需要一个函数时,我们必须在外层引入一个T0,并更改回调来测量和记录时间。

对我来说,理想的方法是只通过包装异步函数来计算它。
timeit(钙)(Arg(呃,RES)= console.log(ERR | | RES))
它需要能够进行良好的分析和记录每个异步函数的执行时间。

注意:(钙)具有相同的函数签名的原始计算功能,那就是,他们接受相同的参数和返回值相同,只是增加了一个特征尺度,可记录时间。

钙(钙),它可以随时更换。

它本身是一个高阶函数,它接受一个函数返回一个函数。在我们的例子中,它接受钙异步函数返回一个函数具有相同的参数和返回值的计算。

下面显示了我们如何实现它的功能:
Const(时间= r.curry(报告,F)= > = > {(参数…)

const T0 = Date.now()
const nargs = r.init(args)
const回调= r.last(args)

NArgs.push(= > { args(…)
const T1 = date.now()
回调(…args)
报告(t1到T0),…args)
})

F(…nargs)

})

const timeit1 =时间(
(T,呃,RES)= console.log(`日志:$ {呃RES }后产生的:$ {T} ` | |)


常量=(x,y,z,回调)=
((setTimeout回调)=(null,X Y Z),1000)
钙(18, 7, 3,(呃,RES)= console.log(ERR | | RES))

timeit1(钙)(18, 7, 3,(呃,RES)= console.log(ERR | | RES))
这次实施接受两个参数:

报告:一个函数用于生成分析结果。
f:我们想解析异步函数。
timeit1是一种方便实用的功能,它只使用console.log记录时间的测量结果,我们定义它通过报表参数的一个更一般的时间函数。

我们的目的已经达到,现在我们只能在timeit1时间异步函数。
timeit1(钙)(18, 7, 3,(呃,RES)= console.log(ERR | | RES))
一般timeit函数接收一个报告的回调函数和异步函数,并返回一个新的异步函数。这个异步函数具有与原始函数相同的参数和返回值:
TimeIt(
(时间…结果):
asyncfunc
()
参数...,
(…在异步 / /结果)= >功能

现在让我们深入到它的实现。我们可以简单地生成一个通用的功能类似于timeit1,因为它使用的是科丽r.curry。

我不打算在本文中讨论科丽,但是下面的代码演示了科丽的主要用法:
Const(f(x,y)r.curry = x + y)
f(1, 10)11
f(1)(10)= 11

const 1 = F(1)
1(10) / / = = 11
另一方面,有在这样的时候实施的几个问题:
= > {(参数…)
const T1 = date.now()
回调(…args)
报告(t1到T0),…args)
}
这是一个匿名函数(也称为lambda,回调),这是在异步执行原始函数后调用的。主要问题是这个函数不处理异常。如果回调抛出异常,则报告将永远不会被调用。

我们可以试试/捕捉到这种lambda函数,但问题的根源是回调和报告是两个函数,它们是不相关的,它包含两个扩展(续)(报告和回调)。如果我们记录执行时间只有在控制台,或者如果我们决定是否报告或回调将抛出一个异常,那么一切都是正常的。但如果我们想要执行的分析结果的基础上的一些行为,我们需要加强和澄清我们的节目连续序列。

好了,这篇文章的全部内容,希望能帮助你学习工作,如果有问题可以交流。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部