javascript - 关闭编译器选择性优化?

标签 javascript google-closure-compiler

我正在使用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/

相关文章:

java - 带有 ZK 的原生 JavaScript?

javascript - 将对象数组转换为常规 JavaScript 对象

javascript - 使用 Google Closure 的 @typedef 标签

javascript - 为 Javascript 编译 google libphonenumber

javascript - 仅随机排列关联数组中的选定项目

javascript - 在javascript中访问带有特殊字符的json键

javascript - 数组中最大的总和,无需添加 2 个连续值

java - 一个进程调用期间的多个标准输入/标准输出操作

java - 闭包编译器选项

javascript - 如何在 JavaScript 中记录返回值