パフォーマンス-Date.now()とDate.getTime()


113
var timeInMs = Date.now();

MDNごと

var timeInMs = new Date(optional).getTime();

MDNごと。

2番目のバージョンでは、構文と、オプションで日付を(現在ではなく)設定する機能以外に、2つの間に違いはありますか?

Date.now()の方が高速です-jsperfをチェックしてください


54
気にかける人にとっては、Date.now()はIE9より前のバージョンのInternet Explorerでは機能しません。私自身は気にしない
guido

8
それだけの価値がある場合は、developer.mozilla.org / en-US / docs / JavaScript / Reference /…に記載さている互換性シムを追加して、IE <9でもDate.now()を機能させることができます。
jrajav 2012

回答:


105

これらは同じです(意味的に編集します。パフォーマンスが少し向上します.now())。

var t1 = Date.now();
var t2 = new Date().getTime();

ただし、すでに作成されているDateインスタンスの時間値は、その構築時(または設定されている任意の日時)に凍結されます。つまり、これを行うと:

var now = new Date();

しばらく待ってから、次のを呼び出すとnow.getTime()、変数が設定された時点の時間がわかります。


プログラムの最初に1つの日付オブジェクトを作成し、メソッドdateObj.setTime(Date.now())にアクセスDateする必要がある非同期処理(などdateObj.getMinutes())を実行するたびに、その日付オブジェクト()を更新するか、新しい日付オブジェクトを作成する方がパフォーマンスが良いと思いますか?
doubleOrt 2018年

3
@Taurusの最新のJavaScriptランタイムは、オブジェクトの作成とガベージコレクションに非常に優れています。なんらかのリアルタイムゲームカーネルに取り組んでいない限り、心配する必要はまったくありません。見栄えがよく、壊れにくいコードを記述します。
先のとがっ

1
感謝を言うべきではありませんが、感謝します(これを2回以上行ったことがないことを願っています)。
doubleOrt

57

これらは事実上同等ですが、を使用する必要がありますDate.now()。より明確で、約2倍の速さです。

編集:ソース:http : //jsperf.com/date-now-vs-new-date


1
これはDate(optional).getTime();、現在の時刻を取得する前に新しいDateオブジェクトを取得するためにスペースを割り当てる必要があるためですか?
チャーリーG

多分そう。ただし、オブジェクトの実際の割り当てではなく、Dateコンストラクターが実行するすべてのことと関係があると思います。
jrajav 2012

ええ、私は急いでそれを追加しました-私はオブジェクトの作成に伴う割り当てとすべてのものを意味しました。
チャーリーG

4

これを行う(new Date()).getTime()と、新しいDateオブジェクトが作成されます。これを繰り返し行うと、Date.now()よりも約2倍遅くなります。

同じ原則がArray.prototype.slice.call(arguments, 0)vs[].slice.call(arguments, 0)



2

再インスタンス化せずにDateのメソッドにアクセスするには、時間追跡変数を単なるミリ秒数ではなく、Dateオブジェクト形式で保持することが望ましい場合があります。その場合、Chromeでは約20%、IEではわずかですが、Date.now()は新しいDate()などよりも優れています。

私のJSPERFを参照してください

timeStamp2.setTime(Date.now()); // set to current;

timeStamp1 = new Date(); // set to current;

http://jsperf.com/new-date-vs-settime

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.