性能 - Date.now() 与 Date.getTime()

问题描述 投票:0回答:7
var timeInMs = Date.now();

根据 MDN

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

根据 MDN

除了语法和第二个版本中通过可选设置日期(不是当前日期)的能力之外,两者之间还有什么区别吗?

Date.now()
更快 - 查看 jsperf

javascript timestamp
7个回答
143
投票

这些东西是相同的(编辑语义上;使用

.now()
性能会更好一点):

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

但是,任何已创建的

Date
实例的时间值在其构造时(或在其设置的任何时间/日期)都会被冻结。也就是说,如果你这样做:

var now = new Date();

然后等待一段时间,随后调用

now.getTime()
将告知设置变量时的时间。


75
投票

它们实际上是等效的,但您应该使用

Date.now()
。它更清晰,速度大约快两倍。

编辑:来源:http://jsperf.com/date-now-vs-new-date


5
投票

当您执行

(new Date()).getTime()
时,您正在创建一个新的 Date 对象。如果你重复这样做,它会比 Date.now() 慢大约 2 倍

同样的原则也适用于

Array.prototype.slice.call(arguments, 0)
[].slice.call(arguments, 0)


3
投票

是的,这是正确的;使用当前时间时,它们实际上是等效的。


3
投票

有时,最好以 Date 对象格式保留一些时间跟踪变量,而不是仅保留毫秒数,以便无需重新实例化即可访问 Date 的方法。在这种情况下,Date.now() 仍然胜过 new Date() 等,尽管在我的 Chrome 上仅高出约 20%,而在 IE 上仅高出一点点。

查看我的 JSPERF

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

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

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


0
投票

Date.now() 调用静态方法,这足以成为首选,执行测试:


# cat test.ts

const limit = 10000000 //ten milion
let startTime = Date.now()
let val = 0

for (let i=0; i<=limit; i++) {
    const val1 = Date.now()
}

let diff = Date.now() - startTime

console.log('Time Date.now(): ' + diff + ' ms')

startTime = Date.now()
val=0
for (let i=0; i<=limit; i++) {
    const val1 = new Date().getTime()
}

diff = Date.now() - startTime

console.log('Time with new Date().getTime: ' + diff + ' ms' )

测试执行:


# node test.ts
Time Date.now(): 818 ms
Time with new Date().getTime: 1625 ms

Date.now() 快了 50%


-1
投票

Date.now()
正在调用类
now()
的静态方法
Date
。 而
new Date().getTime()
可以分为两个步骤:

  1. new Date()
    :调用
    constructor()
    类的
    Date
    方法来初始化
    Date
    类的实例。
  2. 调用我们刚刚初始化的实例的
    getTime()
    方法。

MDN Web 文档

Date.now()
分类为
Date
的静态方法,将
Date.prototype.getTime()
分类为实例方法。

© www.soinside.com 2019 - 2024. All rights reserved.