从现有的javascript Date()对象获取当前时间?

时间:2011-12-02 19:54:42

标签: javascript date time

我正在实时的javascript应用程序中编写一些调试代码。在更新循环中,我想:

  1. 以毫秒为单位获取当前时间
  2. 与上一帧的时间进行比较并打印出帧率
  3. 从上面的变量设置最后一帧的时间到当前时间

一切都很简单,除了因为它是在如此性能关键的代码片段中,我试图不打电话

var d=new Date();

我打电话之前的每一帧

thisFrameTime = d.getTime();

这可能吗?是否有类似的东西:

d.now

更新现有日期对象的时间?

我的想法是,我想在调试模式下远离内存分配/ gc,因此它会降低帧速率 - 但也许这不是在javascript中完成的方式? (我的背景是更多的C / C ++,所以也许这不是思考JS的正确方法?)

我搜索了Google和Stack Overflow,似乎无法找到答案,这让我觉得这是不可能的。如果是这种情况,确认会有所帮助。

会喜欢任何想法 - 完成这项任务的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

有一个Date.now()功能。

var time = Date.now()

问题是它是EcmaScript 5的一部分,因此较旧的浏览器(IE 6-8)不支持它。正如在MDM(上面的链接)上所写,您可以通过将其包含在您的代码中来解决此问题:

if (!Date.now) {  
  Date.now = function() {  
    return +(new Date);  
  };  
}  

答案 1 :(得分:1)

您不在浏览器中控制gc,它在运行时运行。每次需要当前时间时创建Date对象可能是执行此操作的最佳方式,除非您持有对象的引用(这将阻止它们收集),否则应该是微不足道的。

但是,您应该使用AOP样式的分析代码,而不是将“调试代码”烘焙到您的源代码中。我甚至不确定那是什么,但这听起来像是你永远不应该做的事情。