在Chrome中分析我的网络应用时,我发现以下功能功能占我的应用总运行时间的很大一部分(考虑到它的使用频率,这是合理的 - 每次加载可能是1000次)。因此,我想知道是否有人建议如何改进它以提高性能?
function getDate(dateString) {
re = dateString.split(/\-|\s/);
return new Date(re.slice(0, 3).join('/') + ' ' + re[3]);
}
此函数的格式为:“YYYY-MM-DD HH:MM:SS”,例如:“2014-06-06 23:45:00”,并返回Javascript日期。
我正在使用jQuery,因此这是一个选项。
答案 0 :(得分:2)
检查以下代码:
function getDate(dateString) {
re = dateString.split(/\-|\s/);
return new Date(re.slice(0, 3).join('/') + ' ' + re[3]);
}
function getDate2(d) {
return new Date(
d.substr(0, 4) +
'/' +
d.substr(5, 2) +
'/' +
d.substr(8, 2) +
' ' +
d.substr(11, 8)
);
}
function getDate3(d) {
return new Date(d);
}
function benchmark(func, times) {
var start = new Date();
for (var i = 0; i < times; i++) {
var temp = eval(func);
}
var end = new Date();
console.log(func + 'took ' + (end - start) + ' microseconds to execute ' + times + ' times.');
}
var str = '2014-06-06 23:45:15';
benchmark("getDate(str)", 1000000);
benchmark("getDate2(str)", 1000000);
benchmark("getDate3(str)", 1000000);
这给了我以下结果:
LOG: getDate(str)took 2215 microseconds to execute 1000000 times.
LOG: getDate2(str)took 940 microseconds to execute 1000000 times.
LOG: getDate3(str)took 270 microseconds to execute 1000000 times.
所以,你可以看到正则表达式引擎在Javascript中受到高额惩罚。使用substr
可将执行时间减少50%以上,并且使用直接字符串(在现代Javascript运行时中有效)可将执行时间减少近90%。 : - )
答案 1 :(得分:1)
不使用那么多数组操作,特别是不使用全局re
变量,应该有所帮助:
function getDate(dateString) {
return new Date(dateString.replace(/-/g, "/"));
}
但请注意,YYYY-MM-DD HH:MM:SS
是一种有效的日期格式,将由Date
constructor直接解析(好的,可能不在旧的IE中),但在标准浏览器中,这也可以使用:
function getDate(dateString) {
return new Date(dateString);
}