したがって、JavaScript を使用して現在の時刻をミリ秒単位で取得できることはわかっています。しかし、代わりに現在の時刻をナノ秒単位で取得することは可能ですか?
7 に答える
以下を使用して、ほとんどのブラウザでマイクロ秒の精度を実現します。
window.performance.now()
参照:
ジェフリーの答えに基づいて、(OPが望んでいたように)絶対タイムスタンプを取得するには、コードは次のようになります。
var TS = window.performance.timing.navigationStart + window.performance.now();
結果はミリ秒単位ですが、伝えられるところによれば「 1000 分の 1 ミリ秒まで正確」な浮動小数点値です。
Node.js などのサーバー側環境では、次の関数を使用してナノ秒単位で時間を取得できます。
function getNanoSecTime() {
var hrTime = process.hrtime();
return hrTime[0] * 1000000000 + hrTime[1];
}
同様の方法でマイクロ秒も取得します。
function getMicSecTime() {
var hrTime = process.hrtime();
return hrTime[0] * 1000000 + parseInt(hrTime[1] / 1000);
}
いいえ。JavaScript レイヤーでナノ秒の精度が得られる可能性はありません。
非常に高速な操作のベンチマークを行う場合は、数千回実行するループに入れてください。
UNIX エポックからのミリ秒 (マイクロ秒単位の解像度)。
performance.timing.navigationStart
廃止されました! 代わりに次を使用します。
(performance.now() + performance.timeOrigin)
仕様からの関連する引用
この仕様では、システム クロックのずれや調整の影響を受けないように、時刻の起点と現在の時刻をミリ秒未満の解像度で提供する API を定義します。
timeOrigin
属性は、オブジェクトの関連するグローバル オブジェクトの時間起点タイムスタンプの高解像度時間を表す を返さなければなりません。DOMHighResTimeStamp
Performance
時間原点タイムスタンプは、時間原点がゼロの高解像度の時間値です。
時間の原点は、時間が測定される時間値です
now()
メソッドは、現在の高解像度時間を返さなければなりません。現在の高解像度時間は、時間の原点から現在の時間 (通常は「現在」と呼ばれます) までの高解像度時間です。
実際には、セキュリティ上の理由から(サイドチャネル攻撃を防ぐため) それほど正確ではないことに注意してください。
この仕様は、サブミリ秒の時間分解能を提供する API を定義します。これは、以前に利用可能だった によって公開されたミリ秒の分解能よりも正確です
DOMTimeStamp
。ただし、この新しい API がなくても、攻撃者は実行を繰り返して統計分析を行うことで、高精度の推定値を取得できる可能性があります。新しい API がそのような攻撃の精度や速度を大幅に向上させないようにするために、DOMHighResTimeStamp
タイプの最小解像度は、攻撃を防ぐのに十分なほど不正確でなければなりません:現在推奨される最小解像度は 5 マイクロ秒以上であり、必要に応じて、アーキテクチャやソフトウェアの制約、またはその他の考慮事項によるプライバシーとセキュリティの問題に対処するために、ユーザー エージェントによってより高く設定されます。
JavaScript は時間をミリ秒単位で記録するため、その精度で時間を取得することはできません。賢明な答えは、「1,000,000 を掛ける」ことです。