我目前正在记录一个 AJAX 应用程序,其中包含包含某些交互时间的消息。所以我有几个地方的代码遵循这样的模式:

var startTime = new Date();
this.doFunction();
var endTime = new Date();
logger.log("doFunction took " + (endTime - startTime) + " milliseconds.");

我要做的是将计时分离到一个库函数中,该函数将函数作为参数,看起来像:

time : function(toTime) {
    var startTime = new Date();
    eval(toTime);
    var endTime = new Date();
    logger.log(toTime + " took " + (endTime - startTime) + " milliseconds.");
} 

(语法可能有问题,我对JavaScript不太熟悉)

这样我就不用做计时了:

time(this.doFunction);

我的问题是,不同的浏览器有不同的行为吗 eval()?例如将 eval 触发到一个新线程中,从而使我的计时不正确?

任何其他有关时间安排的建议将不胜感激。

有帮助吗?

解决方案

不。所有浏览器的 JavaScript 引擎都是单线程的。我怀疑您也可以通过简单地调用 toTime() 作为函数而不是使用 eval() 来解决这个问题。您可能想研究一下 javascript 论点 对象和 javascript "称呼" 和 "apply" 方法将传递给外部 "time" 函数的参数透明地转发到内部 "toTime" 函数。

其他提示

评估应该是同步的。

您不应该使用eval()toTime.call(),因为你应该避免使用eval。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top