为什么看似更长的字符串到JavaScript Date方法比另一个看起来更短,更简单的方法更快?

时间:2019-01-23 13:02:46

标签: javascript

我要转换的JSON字符串包含日期格式为value = "YYYY-MM-DDTHH:MM:SSZ"的日期值,但是由于某些技术原因,我不会转移到new Date(value)上将不起作用。但是,格式为"YYYY/MM/DD HH:MM:SS"的值将起作用。

还可以使用另一种方法,将值分解为年,月,日,时,分,秒,并使用这些值创建新的Date()。

看似更长的方法,将值分解为以下部分:

var ymd = value.split('T')[0].split('-');
var hms = value.split('T')[1].substr(0,8).split(':');
return new Date(ymd[0], ymd[1]-1, ymd[2], hms[0], hms[1], hms[2]);

一种简单易懂的方法是这样的:

return new Date(value.replace(/-/g, '/').replace('T', ' ').substr(0,19));

这两种方法都可以,但是第一个看起来更复杂,但明显比单线快。我有一个包含数百个元素的数组,每个元素包含一个具有多个原始字符串格式的日期值的Object。使用第一种长久的方法,基本上所有内容都会立即返回。使用第二种单线方法时,每次返回都会明显停顿一两秒钟。

我很好奇为什么第一种方法比第二种方法快得多。有什么想法吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

根据https://medium.com/dailyjs/js-regexp-fast-and-slow-d29d6b77b06

String.split()的速度可以比Regex快40倍,除非满足某些条件导致Regex在内部调用string.split()。

答案 1 :(得分:1)

首先,与搜索字符串有关的所有操作都变慢(没有索引的操作)。

替换需要搜索字符串中的所有匹配项以进行替换。 replace本身也是cpu使用者,它需要在内存中创建一个新字符串来管理替换。

要考虑的另一件事是浏览器引擎,某些引擎的运行速度比其他引擎要快,这取决于浏览器是否使用内部功能

有关更多信息,请参见此链接: Why is String.replace() with lambda slower than a while-loop repeatedly calling RegExp.exec()?

相关问题