gpt4 book ai didi

javascript - 挂起的生成器函数是否有性能成本?

转载 作者:行者123 更新时间:2023-11-30 21:02:13 31 4
gpt4 key购买 nike

永久挂起的函数生成器是否有性能成本?

例如,下面的代码将不断地yield 值,直到达到for 循环中d 的值。

出于问题的目的,我们有意阻止生成器达到 done 状态。这样做有资源成本吗?当然,理论上很容易向生成器表明我们实际上已经完成了,但这有关系吗?为什么不让它永远挂起,直到需要再次使用它?

var fruits = ['apple', 'pear', 'strawberry']

function* fruitGenerator(items) {
var numberOfItems = items.length
var i = 0

while (true) {
yield items[i]
i++
if (i === numberOfItems) {
i = 0
}
}
}

var multipleFruits = fruitGenerator(fruits)

for (var d = 0 ; d < 10; d++) {
console.log(multipleFruits.next())
}

出于所有意图和目的,我们假设对于这个示例,我不能使用常规的 for 循环。

最佳答案

生成器函数有自己的执行上下文,每次生成器函数都必须恢复 resumed .当生成器函数未被执行时,其执行上下文存储在生成器对象的内部属性槽 [[GeneratorContext]] 中。

从某种意义上说,使用生成器函数是否存在任何开销,答案是肯定的,它们需要那些来恢复已保存的执行。您是否能够使用分析工具检测到它们,可能不会 - 所有 JavaScript 操作都有标准中定义的执行步骤,并且恢复和保存执行上下文不太可能比 JavaScript 操作中的其他步骤更重要。

从某种意义上说,生成器函数在不使用时会消耗执行时间,答案是否定的。 Generator objects是驻留在内存中直到被使用的对象。

关于javascript - 挂起的生成器函数是否有性能成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47027191/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com