使用Google闭包编译器调试代码删除
Debug code removal using Google Closure Compiler
如果我通过高级优化运行以下代码,我仍然可以在代码中看到调试语句。
var log = console.info.bind(console);
(function() {
/** @const */
var DEBUG = false;
log('Brady', createRank({
max: 100,
debug: DEBUG
}));
})();
function createRank(options) {
if (options.debug) {
log('This should be in debug mode only');
}
if(typeof alert == 'function'){
alert(options);
}
return (Math.random() * options.max) | 0;
}
高级模式编译后的输出
(function() {
var a = console.info.bind(console),
b = {
max: 100,
debug: !1
};
b.debug && a("This should be in debug mode only");
"function" == typeof alert && alert(b);
a("Brady", Math.random() * b.max | 0);
})();
如何使用高级模式消除调试消息?
如果DEBUG变量被定义为全局变量,并且日志记录语句像一样被括起来
if(调试){日志("调试消息");}
那么它会起作用,但如果我们不希望它作为全局变量,而是通过参数将值传递给各个模块/函数,有没有办法让它起作用。
这是当前一组优化以及它们何时运行的限制。优化是编译时间和优化之间的权衡,所做的选择不一定适用于每种代码模式。
在这种特殊情况下,问题是全局作用域的"属性折叠"只发生一次,也就是在函数内联发生之前(函数本地对象的"属性崩溃"发生在主优化循环期间)。为了删除示例中的代码,"collapse properties"至少需要再次运行一次,或者需要增强函数本地版本(更保守)才能在全局范围内运行。
这里也讨论了这一点:https://github.com/google/closure-compiler/issues/891
相关文章:
- 如何从rails中的代码中删除新行( )
- 解析云代码作业:删除在数据库中已经存在一个小时的行
- 改进js代码以删除全局变量和函数
- 如何在 JavaScript 中使用正则表达式从颜色代码中删除“#”
- 从此代码中删除 Jquery
- 从生产版本的javascript代码中删除断言
- 如何从代码中删除C样式注释
- 从 json 代码中删除 javascript 对象变量名称文本
- 代码点火器 - 删除而不刷新页面
- 如何在国家/地区代码后删除 0
- 从跟踪代码中删除管道字符
- 从 dom 文本中删除美元符号 - 而不是从 js 代码中删除
- 如何从电子邮件格式检查器代码中删除错误文本
- 如何从此代码中删除时间
- 为什么这个代码(同时删除几个项目)会挂在防火墙后面
- 为什么这个jquery代码不删除li列表项
- 如何从下面的代码中删除数据库中的图像
- 从jQuery的代码中删除不必要的函数
- 在CKEditor上显示代码,删除abbr标签
- 如何在此Javascript代码中删除特殊字符