2013-04-01 3 views

答えて

5

window.performance.now()を使用すると、単調で高解像度の時間を得ることができます。 now()関数は、小数部にマイクロ秒を含むdoubleを返します。ここで

は一例です:now()は、典型的な「エポックからの時間」ではないことを

import 'dart:html'; 

main() { 
    var time = window.performance.now(); 
    print(time); // 12123.24341221 
} 

注意してください。代わりに、window.performance.timing.navigationStartのデルタです。

navigationStartフィールドは(specから)のように定義されます。

この属性は、ユーザーエージェント、以前の文書をアンロードするよう促す 終了した直後の時間を返さなければなりません。 以前のドキュメントがない場合、この属性は fetchStartと同じ値を返す必要があります。それはクロック・スキューの影響を受けて、新しいDateTimeを得るよりも正確ではないので

window.performance.now()タイムスタンプは素晴らしいです。

アプリケーションが​​で駆動されている場合は(そうでない場合は、なぜですか?:)その後、高解像度のタイムスタンプがあります。

今後は、高解像度のタイムスタンプでanimationFrame完了によって返された:あなたが時間を測定したい場合はStopwatchクラスを使用またがる

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

main() { 
    window.animationFrame.then(gameLoop); 
} 
4

:あなたはこのようにそれを使用することができます

Future<num> animationFrame; 

。これは普遍的に(クライアントとサーバー上で)機能し、最高の解決策を提供する必要があります。現在(2013年4月現在)

var sw = new Stopwatch()..start(); 
doSomething(); 
print(sw.elapsed); 
print(sw.elapsedMicroseconds); 

ブラウザでストップウォッチはまだwindow.performance機能を使用しませんが、それはbugだと固定してください。その間、あなたはSethによって提案された回避策を使用することができます。

+0

クイックベンチマークは、JavaScriptにコンパイルすると、Stopwatchがwindow.perf.now()よりも遅いことを示しているようです:https://code.google.com/p/dart/issues/detail?id=9584 –

関連する問題