什么比Dart网络应用程序中的新DateTime更精确?

Set*_*add 6 dart

获取新DateTime内容对我来说不够准确.浏览器中的日期对象以毫秒为单位给出整数.我希望能够获得比标准日期对象更精确的时间.这可能吗?我怎样才能做到这一点?

Set*_*add 6

使用window.performance.now()得到单调,高分辨率的时间.该now()函数在小数中返回一个微秒的double.

这是一个例子:

import 'dart:html';

main() {
  var time = window.performance.now();
  print(time); // 12123.24341221
}
Run Code Online (Sandbox Code Playgroud)

请注意,这now()不是典型的"时代的时间".相反,它是一个三角洲window.performance.timing.navigationStart.

navigationStart字段定义为(来自规范):

在用户代理完成提示卸载先前文档后,此属性必须立即返回时间.如果没有先前的文档,则此属性必须返回与fetchStart相同的值.

window.performance.now()时间戳是伟大的,因为它不受时钟偏斜,比得到一个新的更准确DateTime.

如果你的应用程序是由requestAnimationFrame(如果没有,为什么不?)那么你已经有了一个高分辨率的时间戳!

返回的Future animationFrame以高分辨率时间戳完成:

Future<num> animationFrame;
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用它:

gameLoop(num highResolutionTime) {
  // stuff
  window.animationFrame.then(gameLoop);
}

main() {
  window.animationFrame.then(gameLoop);
}
Run Code Online (Sandbox Code Playgroud)


Flo*_*sch 5

如果要测量时间跨度,请使用Stopwatch该类。它可以通用(在客户端和服务器上)工作,并且应该提供最佳的分辨率。

var sw = new Stopwatch()..start();
doSomething();
print(sw.elapsed);
print(sw.elapsedMicroseconds);
Run Code Online (Sandbox Code Playgroud)

目前(截至2013年4月),浏览器中的秒表尚未使用该window.performance功能,但这是一个错误,应予以修复。同时,您可以使用Seth建议的解决方法。