从JavaScript中切换案例中删除死代码

时间:2013-07-26 18:25:51

标签: javascript performance google-closure-compiler yui-compressor

是否有任何压缩器负责删除在应用程序中无法调用的开关盒?

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个案例,因此问题。

谢谢, -Vikrant

2 个答案:

答案 0 :(得分:3)

不,先生,

由于id是变量,因此压缩器不会“知道”这不会发生。压缩器不会分析switch语句中的变量值,也不知道如何删除它们。

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

答案 1 :(得分:3)

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

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