获得一个新DateTime
的对我来说不够准确。浏览器中的日期对象以整数形式给我毫秒。我希望能够获得比标准日期对象更精确的时间。这可能吗?我怎样才能做到这一点?
问问题
751 次
2 回答
6
用于window.performance.now()
获得单调、高分辨率的时间。该now()
函数以小数形式返回带有微秒的双精度数。
这是一个例子:
import 'dart:html';
main() {
var time = window.performance.now();
print(time); // 12123.24341221
}
请注意,这now()
不是典型的“从纪元开始的时间”。相反,它是window.performance.timing.navigationStart
.
该navigationStart
字段定义为(来自规范):
此属性必须在用户代理完成提示卸载前一个文档后立即返回时间。如果没有以前的文档,则此属性必须返回与 fetchStart 相同的值。
时间戳很棒,window.performance.now()
因为它不受时钟偏差的影响,并且比获取新的DateTime
.
如果您的应用程序是由驱动的requestAnimationFrame
(如果不是,为什么不呢?:) 那么您已经有了一个高分辨率的时间戳!
animationFrame
以高分辨率时间戳完成的 Future 返回:
Future<num> animationFrame;
你可以像这样使用它:
gameLoop(num highResolutionTime) {
// stuff
window.animationFrame.then(gameLoop);
}
main() {
window.animationFrame.then(gameLoop);
}
于 2013-04-01T05:22:38.147 回答
5
如果要测量时间跨度,请使用Stopwatch
该类。它可以通用(在客户端和服务器上)并且应该提供最好的解决方案。
var sw = new Stopwatch()..start();
doSomething();
print(sw.elapsed);
print(sw.elapsedMicroseconds);
目前(截至 2013 年 4 月)浏览器中的秒表尚未使用该window.performance
功能,但这是一个错误,应该修复。与此同时,您可以使用 Seth 建议的解决方法。
于 2013-04-01T12:37:55.880 回答