gpt4 book ai didi

javascript - 调度表与 Switch 语句

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:01:51 25 4
gpt4 key购买 nike

我试图了解调度表如何优于 switch 语句,假设我们有以下两种情况来处理相同的功能

切换语句

swtich(value){
case 'a':
fun1(value);
break;

case 'b':
fun2(value);
break;

case 'c':
fun3(value);
break;

}

现在上面的 switch 语句可以继续增长并变得杂乱无章,因此有一个“调度表”的替代方案,我们可以在其中使用一个对象

调度表

function dispatching(value){
var list = {
'a': fun1,
'b': fun2,
'c': fun3
}

return list[value]();
}

如果我们要遵循上述功能,对象 list 在调用时是否必须遍历其所有属性。我看到它如何使其易于维护,但它是否提高了性能?

最佳答案

...but does it improve in performance?

它重要的可能性非常非常小。如果这对您正在做的事情可能很重要,那么最好的办法是使用代表性选项对它进行编码,然后对其进行测试,例如使用 http://jsperf.com 进行测试。 .

但是,是的,查找对象的属性可能比等效的 switch 更快。要处理一个switch,引擎需要按源代码顺序测试用例,并在第一个匹配时停止; JavaScript switch 实际上只是 if...else if... 的另一种形式。 (当然,如果引擎可以看到选项是互斥的,它可以优化该过程。)相比之下,现代 JavaScript 引擎是即时编译器,并在运行时生成类;按字符串名称 (list[value]) 查找属性不如按名称文字查找属性 (list.a) 快,但它仍然非常快,因为引擎不必按顺序进行,可以使用平衡哈希树或类似的方法查找属性。

然而,换个说法:如果您的函数相当短,引擎可能能够将它们内联到 switch 版本中(例如,在幕后,将函数代码移动到 switch 而不是实际进行函数调用),这可能会在性能方面采取另一种方式。这在很大程度上取决于您的功能在做什么。

但同样,它重要的可能性非常低。这不会成为您应用程序的瓶颈。我会根据我认为在上下文中更易于维护的内容来做出决定,并且如果我确定调度机制是瓶颈,我会担心性能。 (这对我来说还从来没有发生过。:-))

关于javascript - 调度表与 Switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35570583/

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