是否有任何压缩器负责删除在应用程序中无法调用的开关盒?
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
答案 0 :(得分:3)
不,先生,
由于id
是变量,因此压缩器不会“知道”这不会发生。压缩器不会分析switch语句中的变量值,也不知道如何删除它们。
如果您“知道”这些情况不会发生,请自行删除。
答案 1 :(得分:3)
没有什么可以明确地给你一个死案例陈述的清单。如果它说它可能不存在另一个值(有限代码分支)或它正在撒谎。因此,除非您知道可以传递给execute_case
的所有可能值,否则您将处于黑暗中。 (我假设你没有提出这个问题)。
可以做的是在该代码中放置一个小记录器,输出/记录传递给该开关的值。然后,在[大量]时间和/或数千次执行中,跟踪哪些被击中而哪些不被击中。我不一定会删除那些没有被击中的人,但可能会尝试弃用它们并等待更长的持续时间/更多的执行,直到你得出结论它不再是必要的。