使用console.time

时间:2011-10-20 09:51:11

标签: google-closure-compiler google-closure google-closure-library

我正在使用Google Closure Library及其编译器创建一个应用程序。要调试值,我使用console.log()。编译它将抛出以下异常JSC_UNDEFINED_VARIABLE. variable console is undeclared at ...。要解决此错误,我只需使用window.console.log()代替 我还想测量一个函数的时间。 Firebug有两个很好的函数console.time(name)console.timeEnd(name)来做到这一点非常容易。不幸的是,Closure Compiler不支持这些函数抛出以下警告JSC_INEXISTENT_PROPERTY. Property time never defined on Window.prototype.console at ...。很遗憾,您无法通过预先window来解决此警告 我也看了一下这个库,但goog.debug.Console没有我需要的功能。
我之前使用的另一个解决方案是类似下面的

var start = new Date();  
// do something
var end = new Date();

// do some calculation to get the ms for both start and end
var startMS = ....;
var endMS = .....;
// get the difference and print it
var difference = (endMS - startMS) / 1000;
console.log('Time taken for something: ' + difference);

这是一个有点太多的代码,如果你经常使用它,并且具有这两个函数的版本会很棒:

window.console.time("timeTaken");
// do something
window.console.timeEnd("timeTaken");

这会在开始和结束之间打印出MS。但是如上所述,这不适用于闭包编译器。有没有人有这方面的解决方案,我如何使用这两个函数window.console.time()window.console.timeEnd()?或者goog.closure提供的另一个解决方案,但我还没找到?

2 个答案:

答案 0 :(得分:4)

您只需将它们添加到您正在使用的外部。

答案 1 :(得分:1)

如果您不想/不能使用externs,您可以使用基于字符串的属性轻松引用“未声明”对象:

window['console']['log']('Hello Console!');
window['console']['time']('timeTaken');
...

但是你必须要小心,因为如果time属性不存在或者它不是函数,第二行可能会抛出错误。