有没有办法在标准浏览器中提高此功能的效率?

时间:2014-06-07 20:08:19

标签: javascript jquery performance

在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,因此这是一个选项。

2 个答案:

答案 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);
}