Underscore的now方法为何更快?

5

我很好奇Underscore的_.now方法为什么比new Date().getTime()更快。 我在他们的Github代码库中看到了以下内容。

// A (possibly faster) way to get the current timestamp as an integer.
_.now = Date.now || function() {
    return new Date().getTime();
};

请问有人可以解释一下这里发生了什么吗?

使用箭头函数,您可以获得_.now = Date.now || () => +new Date()。;-) 但我猜不支持Date.now的任何内容都不会支持箭头函数... - RobG
2个回答

3

其实不必创建一个new Date对象,可以利用Date.now提供的优势。唯一的问题是浏览器支持,因此他们包含了一个备用方案。更好的做法可能是直接包含一个polyfill。

if (typeof Date.now != "function")
  Date.now = function() { return new Date().getTime(); };

使用这个代替推荐他们自己的帮助函数。


1
类库比如underscore、lodash和jQuery并不改变常规JS环境,它们在自己的命名空间中提供所有函数。 - Barmar
使用 $.each() 而不是一个 Array.prototype.forEach polyfill。 - Barmar
@Barmar 是的,这种方法有很多明显的优点。我只是希望看到它仅用于核心功能,这些功能提供了比标准方法更多的东西,并将其兼容层保持在内部,而不是在命名空间上公开(当然,除非这是显式库的目的)。 - Bergi
@Barmar 嗯,$.each 在任何情况下都无法接近 forEach 的 polyfill :-) - Bergi
好的,也许$.inArray()是一个更好的例子。 - Barmar

0

通过使用 Date.now,你无需构建一个对象。但它不支持 IE < 9。在这种情况下,它使用旧的 new Date().getTime 函数。

Comparison

您可以参考此链接了解浏览器支持的详细信息:http://caniuse.com/#search=Date.now


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接