【问题标题】:Performance - Date.now() vs Date.getTime()性能 - Date.now() 与 Date.getTime()
【发布时间】:2012-09-20 17:00:21
【问题描述】:
var timeInMs = Date.now();

MDN

对比

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

根据MDN

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

Date.now() 更快 - 查看jsperf

【问题讨论】:

标签: javascript


【解决方案1】:

这些东西是一样的(edit语义上;使用.now()性能会好一点):

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

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

var now = new Date();

然后稍等片刻,随后对now.getTime() 的调用将告知设置变量时的时间。

【讨论】:

  • 您是否认为在程序开始时创建一个日期对象然后更新该日期对象 (dateObj.setTime(Date.now())) 或在每次执行异步操作时创建新的日期对象会更高效需要访问Date 方法(如dateObj.getMinutes())?
  • @Taurus 现代 JavaScript 运行时非常擅长对象创建和垃圾回收。除非您正在开发某种实时游戏内核,否则完全没有理由担心它。编写看起来不错且不易碎的代码。
  • 不应该说谢谢,但是谢谢(我希望我没有这样做过一次)。
【解决方案2】:

它们实际上是等效的,但您应该使用Date.now()。它更清晰,速度大约是原来的两倍。

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

【讨论】:

  • 这是因为Date(optional).getTime();在获取当前时间之前必须分配空间来获取新的Date对象吗?
  • 可能,是的。不过,我希望它与 Date 构造函数所做的一切有关,而不是与对象的实际分配有关。
  • 是的,我草草补充了一句——我的意思是分配以及与创建对象相关的所有内容。
【解决方案3】:

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

Array.prototype.slice.call(arguments, 0)[].slice.call(arguments, 0) 应遵循相同的原则

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      有时最好将一些时间跟踪变量保留为 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

      【讨论】:

        猜你喜欢
        • 2015-08-28
        • 2016-11-16
        • 1970-01-01
        • 2020-02-09
        • 1970-01-01
        • 1970-01-01
        • 2019-11-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多