使用Date
对象获取当前时间(以毫秒为单位)有不同的方法:
(new Date()).getTime();
+new Date();
Date.now();
假设你不需要创建一个对象,只需要一个以毫秒为单位的当前时间,哪一个是最有效的?在性能方面。
编辑:我知道大多数开发人员不会关心这个,但当你在低技术嵌入式环境中工作或只是为了扼杀好奇心时,这可能很重要。
使用Date
对象获取当前时间(以毫秒为单位)有不同的方法:
(new Date()).getTime();
+new Date();
Date.now();
假设你不需要创建一个对象,只需要一个以毫秒为单位的当前时间,哪一个是最有效的?在性能方面。
编辑:我知道大多数开发人员不会关心这个,但当你在低技术嵌入式环境中工作或只是为了扼杀好奇心时,这可能很重要。
3条答案
按热度按时间yc0p9oo01#
Date.now()
获胜。请参见jsPerf test。但正如上面的评论所指出的,与您将要做的任何其他事情相比,CPU成本可能都是无趣的。
@techfoobar提到了分配
Date
对象的成本(或者,实际上,* 垃圾收集 * 这些Date
对象的成本)。这可能是也可能不是一个重大的胜利,因为Date.now()
可能是分配号码,这将是昂贵的。7uzetpgm2#
此外,如果时间戳是为了给数据加时间戳以外的任何事情而获得的,例如代码执行的时间,那么最好考虑是否可以通过setInterval或setInterval调用来实现,而不直接访问时间戳值。
vuktfyat3#
由于这里没有讨论performance.now(),并且由于 jsperf.com现在似乎已经关闭,我做了一些简单的测试,结果表明,快速性的排名是:
遗憾的是,performance.now()比Date.now()慢4倍。这是在Chrome上。
这是我的代码,升级到1亿次迭代,performance.new()测试变得更糟。不要担心我使用performance.now()作为所有3个选项的测量计时器,重要的是循环中的内容。我在上一次测试中进行了1亿次迭代,因为我想看看new Date()和www.example.com()上的垃圾收集是否Date.now会启动并惩罚我们。但不是,更糟糕的不是它们,而是performance.now()方法。
顺便说一下,通过fn()函数调用的间接性非常非常小。与直接在循环中调用测试语句相比,它增加了大约200 ms的总时间。