我正在使用Google的闭包编译器优化(简单优化)来减少我的一些JS脚本文件的大小。虽然这很有效,但我在一些函数中遇到了 eval 语句的问题,其中编译器替换局部变量会造成严重破坏。我可以尝试重新编码有问题的函数来击败编译器,但这可能会很痛苦 - 而且从长远来看很危险,因为我今天使用的技巧明天可能不起作用。
如果我可以简单地标记我希望编译器保持不变的代码位,那就更好了。目前,我正在考虑采用所有使用 eval 的函数,将它们放入一个单独的文件中,并在编译器输出的末尾标记该文件。然而,在我这样做之前,我认为值得在这里问一下 - 有没有办法告诉编译器跳过某些函数的优化。例如
// @compilation_level SIMPLE_OPTIMIZATIONS
function test(one,two)
{
}
function testTwo(alpha,beta)
{
}
// @Closure:Skip
function evalFunc(one,two)
{
//eval code here
}
//@Closure:EndSkip
最终结果 - Skip、EndSkip 部分之间的代码通过编译器,没有任何更改。
我已经浏览了文档,但没有找到任何可以做到这一点的东西。
最佳答案
documentation 中有一些关于此问题的提示。提议的跳过功能在大多数情况下可能无法解决任何问题,原因与编译 eval 通常失败的原因相同。
如果您没有访问 evalFunc 范围之外的任何变量,您可以尝试使用括号表示法将所有局部变量重构为属性,并将所有属性名称放在引号中,这样它们就是 won't be renamed 。
例如,
function evalFunc(one) {
this['foo'] = one;
eval('alert(foo);');
}
evalFunc.call({}, 1);
将大致编译为
function(a) {
this.foo = a;
eval("alert(foo);");
};
a.call({}, 1);
保持评估工作。它适用于简单模式和高级模式。
关于javascript - 关闭编译器选择性优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24645923/