我正在实时的javascript应用程序中编写一些调试代码。在更新循环中,我想:
一切都很简单,除了因为它是在如此性能关键的代码片段中,我试图不打电话
var d=new Date();
我打电话之前的每一帧
thisFrameTime = d.getTime();
这可能吗?是否有类似的东西:
d.now
更新现有日期对象的时间?
我的想法是,我想在调试模式下远离内存分配/ gc,因此它会降低帧速率 - 但也许这不是在javascript中完成的方式? (我的背景是更多的C / C ++,所以也许这不是思考JS的正确方法?)
我搜索了Google和Stack Overflow,似乎无法找到答案,这让我觉得这是不可能的。如果是这种情况,确认会有所帮助。
会喜欢任何想法 - 完成这项任务的最佳方法是什么?
答案 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样式的分析代码,而不是将“调试代码”烘焙到您的源代码中。我甚至不确定那是什么,但这听起来像是你永远不应该做的事情。