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

为什么一个看起来更长的字符串到JavaScript日期的方法比另一个看起来更短更简单的方法更快?,javascript,Javascript,我要转换的JSON字符串包含格式为value=“YYYY-MM-DDTHH:MM:SSZ”的日期值,但由于一些技术原因,我不会偏离新日期(值)的主题。但是,格式为“YYYY/MM/DD HH:MM:SS”的值将起作用 另外,使用另一种方法,将值分解为年、月、日期、小时、分钟、秒,并使用这些值创建新的日期() 看起来更长的方法是将值分解为多个部分,如下所示: var ymd = value.split('T')[0].split('-'); var hms = value.split('T')[1

我要转换的JSON字符串包含格式为
value=“YYYY-MM-DDTHH:MM:SSZ”
的日期值,但由于一些技术原因,我不会偏离
新日期(值)
的主题。但是,格式为“YYYY/MM/DD HH:MM:SS”的值将起作用

另外,使用另一种方法,将值分解为年、月、日期、小时、分钟、秒,并使用这些值创建新的日期()

看起来更长的方法是将值分解为多个部分,如下所示:

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));
两种方法都有效,但第一种方法看起来更复杂,明显比一种方法快。我有一个包含数百个元素的数组,每个元素包含一个对象,该对象有几个原始字符串格式的日期值。使用第一个较长的方法,所有内容基本上都会立即返回。在第二次一线进近时,每次返回都会有一到两秒钟的明显停顿

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

谢谢。

根据


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

首先,与搜索字符串相关的任何操作都要慢(任何没有索引的操作)

替换需要搜索字符串中的任何匹配项才能执行替换。替换本身也是一个cpu使用者,它需要在内存中创建一个新字符串来管理替换

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

有关更多信息,请参阅此链接:

“明显更快”您是如何衡量这一点的?第二种方法中的
替换
可能需要迭代整个字符串,而第一种方法将字符串拆分,然后处理较小的片段。您可以通过执行
value.split('T')
一次,使“longer”方法更长,可能更快。因此,简单的拆分比使用状态机运行正则表达式解析器更快?这怎么可能呢?通过“明显更快”,我基于加载动态创建的HTML页面所需的时间,该页面首先依赖于JSON到对象处理来完成。虽然我没有使用计时器,但第一种方法基本上是瞬时的。第二种方法是在加载之前先数一数“一加一千”。我在这两种方法之间来回奔走了好几次,结果是100%可重复的。大家一致认为,原因是替换。我想可能是
newdate()
参数是一个日期字符串,而不是6个日期参数。如果一个日期字符串本身没有减慢处理速度,也许我可以修改JSON本身,使其采用
YYYY/MM/DD HH:MM:SS
格式,并避免拆分。