8

是否有任何压缩机负责移除在应用程序中任何地方都没有调用的开关盒?

function execute_case(id) {
    switch(id) {
    case 0:
       console.log("0");
       break;
    case 1:
       console.log("1");
       break;
    case 2:
       console.log("2");
       break;
    case 3:
       console.log("3");
       break;
    default:
       console.log("default");
       break;
    }
}

execute_case(1);

如果以上就是我所拥有的,那么理论上情况 0,2,3 是死代码并且永远不会被执行。压缩代码时是否有任何压缩器具有删除此代码的智能?

我正在看一段代码,它在 switch 语句中有超过 200,000 个案例,因此是这个问题。

谢谢,-维克兰特

4

2 回答 2

3

不,先生,

作为id一个变量,没有压缩机会“知道”这不可能发生。压缩器不分析 switch 语句中的变量值,并且知道如何删除它们。

如果您“知道”这些情况不会发生,请自行删除它们。

于 2013-07-26T18:28:11.690 回答
3

没有什么能明确地给你一份死案陈述的清单。如果它说它可以,则要么不可能有另一个值(有限代码分支),要么它在撒谎。因此,除非您知道可以传递给 的所有可能值,否则您execute_case将一无所知。(而且我假设您没有提出问题)。

可以做的是在该代码中放置一个小型记录器,用于输出/记录传递给该开关的值。然后,经过 [大量] 时间和/或数千次处决,跟踪哪些被击中,哪些未被击中。我不一定会删除那些没有被击中的,但也许尝试弃用它们并等待更长的持续时间/更多的执行,直到你得出不再需要的结论。

于 2013-07-26T18:35:14.727 回答